开始学习Java了,随便拿了本书看,感觉不错,基础部分和C++的语法很相似。
主要还是记录一下Java和C++不同的一些小细节吧。
Java中,对于移位(shift)操作,右移分为逻辑右移(logic right shift)和算术右移(arithmetic right shift)。
逻辑右移是在最左段采用"0"来补齐,而算术右移才有生成最高位的拷贝来补齐。
在针对无符号数进行处理的时候,两种右移模式是相同的,但是对于有符号数来说,结果就不相同了。
在Java中,>> 为 算术右移 , >>>为 逻辑右移。
比如
int num = -2;
int ans1 = num >> 1;
int ans2 = num >>> 1;
ans1中的值为-1,而ans2中的值为2147483647。
Java和C++中关于表达式的计算有一点小小的区别。
Java中有一条比C++中表达式计算的优先级规则中又多了一条新的更高优先级的规则:(摘自Introduction to JAVA PROGRAMING 5th Edition)
Evaluate whatever subexpressions you can possibly evaluate from left to right.
举例说明:
int a = 0;
int x = a + (++ a);
x的值为1.
int a = 0;
int x = (++ a) + a;
x的值为2.
然而在C++中,上述的代码得到的x的值为2.
采用的GNU/g++ 4.6.3 , 但是编译器会进行提示 , 提示的内容如下:
warning: operation on 'a' may be undefined. [-Wsequence-point]
估计在不同版本的编译器上,得到的结果会不同。