当前位置:  编程技术>java/j2ee

java代码之谜运算符篇

    来源: 互联网  发布时间:2014-10-21

    本文导语:  从最简单的运算符加号(+)说起,加号(+)是个二元运算符——也就是说,加号只把两个数联接起来,从来不把第三个或者更多的联接起来。 因此,“1加2加3” 在计算机中被表述为: (1 + 2) + 3 // a或者 1 + (2 + 3) // b虽然我们通常写...

从最简单的运算符加号(+)说起,加号(+)是个二元运算符——也就是说,加号只把两个数联接起来,从来不把第三个或者更多的联接起来。
因此,“1加2加3” 在计算机中被表述为:
(1 + 2) + 3 // a或者
1 + (2 + 3) // b虽然我们通常写做 1 + 2 + 3,但是并不意味这它和我们数学中的 1+2+3 是等价的。
那么数学中的 1+2+3 到底表示的是 a 呢,还是 b 呢?
如果计算机的求值是左结合的,那么此表达式等价于第一种a; 如果是右结合的,那么此表达式等价于第二种b。
1 + 2 + 3 简单的理解就是 “把1、2、3加在一起”, 确实,在我们接触到的数学里面,就是把三个数加起来。 但是在编程语言中,却不仅仅这样。
就像前面说的那样,+号无法操作三个或者更多的数,参与加法运算的只能是两个数。
顺便说一句,正号、负号是一元运算符,虽然它们和二元运算符加、减用相同的符号, 但是他们却是不同的,所以不要想当然的认为 +4 就等价于 0+4,其实它们不是等价的,
+4 是一个整数,但是 0+4 是一个加法表达式,这个表达式的求值结果正好是 +4。
在 java 中,我们可以写 short a = +4,但是当我们写 short a = 0 + 4 时则产生一个警告。
还有一个其它例子,同样是关于 short 的,
short b = 1;
short b = b + 4; // 警告
short b += 4; // 无警告那么 1 + 2 + 3 是如何运算的呢? 在冯诺依曼体系架构的编程语言中, 这里有一个副作用——我习惯称那些“计算机的运算过程与程序员的大脑思考过程不一样时,则称为副作用”(虽然书本里面没有这么写过,但我一向这么认为), 本来你以为会是这样,结果计算机偏偏就不是这样做的,我称他为副作用。
如果看过前面的『语句与表达式』,这可以这么理解:
1 + 2 是一个表达式,它的返回值是 3。 这个表达式的返回值再参加到另一个表达式中 3 + 3,最后得出结果6。
我们用语句(Statement)来改写这段代码:
// 计算 1 + 2 + 3
var a = 1 + 2;
var b = a + 3;如果我们用 lisp 语言对这个表达式求值,则没有副作用。
(+ (+ 1 2) 3)如果你还没有懂,或者这个例子太有特殊性,那么我们换一个
5 > 4 > 3在数学中,这个算式的值为 true。当我们用C语言来写这段代码,它返回的确实 false。
原因和上面的一样,大于号(>)是二元运算,它无法直接比较三个数,5 > 4 返回的结果是 true, 当用 true 和 3 比较时,true 被转换称 1,也就是 1 > 3,最终的结果自然就是 false 了。
总之,回归到了『语句与表达式』篇的那个观点:在编程语言中 每个表达式都有一个值。
编程语言中的运算符和数学中的运算器虽然一样,但是它们却并不等同。 当你写程序时,要写给人看; 当你调试程序时,要学会用计算机的方式思考代码的含义。
我习惯于把运算符理解为函数,比如 2 + 5 其实就是 add(2, 5) 或者 2.add(5)。 难道我会偷偷的告诉你 “其实很多语言都是这么做的”。

    
 
 

您可能感兴趣的文章:

  • Java 能否实现类似于重载运算符的功能?
  • Java用三元运算符判断奇数和偶数的简单实现
  • Java中的位运算符、移位运算详细介绍
  • Java运算符>、>>、>>>三者的区别
  • java中的移位运算符心得总结
  • Java instanceof 运算符的使用方法
  • Java位运算和逻辑运算的区别实例
  • java位运算加密示例
  • 请问在Java里有没有 运算一个字符串的方法? 如vbscript的 eval("3+5*2") = 13
  • Java中有没有“四舍五入”的运算方法?
  • java学习:日期的运算代码
  • 如何调用JAVA的库函数进行加解密运算?
  • Java中位运算(移位、位与、或、异或、非) 的简单实例
  • Java中使用BigDecimal进行浮点数运算
  • java大数乘法的简单实现 浮点数乘法运算
  • 使用java处理字符串公式运算的方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java操作excel2007文档介绍及代码例子
  • 寻找<<java2图形设计卷2SWING>>一书源代码和<<java网络高级编程>>一书源代码
  • java实现判断字符串是否全是数字的四种方法代码举例
  • 怎样将标准的C++代码转换成JAVA代码??
  • java Servlet获取和设置cookie实例代码
  • 哪位会使用代码保护工具WingGuard来保护java代码?
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • Java代码分享工具 Java Gems
  • java Servlet实现Session创建存取以及url重写代码示例
  • 各路JAVA高手们,能否给我一个用JAVA写的简单聊天室代码?
  • 你最喜欢去的JAVA网站或JAVA源代码下载网站是哪里???
  • JAVA APPLET与JSP有什么区别?好像都是把JAVA代码嵌到网页中。
  • java里有什么函数可以检查 java 代码并执行它?
  • 谁有Java源代码中floatToIntBits,intBitsToFloat的源代码?
  • 怎样看到java程序经过编译后的代码内容(bytecode的)或者在bytecode在JVM执行时JVM所解析的代码
  • 大哥大姐们小弟刚学JAVA,对它没点头绪啊!能告诉我JAVA在什么环境下编写代码和编译吗??
  • java与js代码互调示例代码
  • java文件复制代码片断(java实现文件拷贝)
  • 你认为最好的中文JAVA网站或有大量优秀JAVA源代码免费下载的网站是哪里???送分!!!
  • 有没有这样的软件:把一个不标准格式的JAVA原代码转换为具有标准(或比较标准)编码规范的代码。
  • 请问在java多线程中,是只有run(){}内的代码运行在一个新线程下呢?还是这个类中的代码都运行在一个新线程下?
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3