Java学习笔记 - 01

开始学习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]

估计在不同版本的编译器上,得到的结果会不同。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值