首页 > 编程语言 > 详细

Java负整数的左移、右移、无符号右移

时间:2016-05-13 06:07:09      阅读:299      评论:0      收藏:0      [点我收藏+]

Java负整数的左移、右移、无符号右移。正数的位移没有涉及到符号,而且正数的原码、反码、补码都是一样的,所以相对简单,但是对于负整数的位移,往往容易混淆。

?

Java的<< ?>> ? >>> 都是针对补码来进行的,因为Java只存储补码。

例如对整数-3进行<< ?>> >>>运算做说明。

?

整数-3的二进制

原码为 10000000 00000000 00000000 00000011

反码为?11111111 11111111 11111111 11111100

补码为 11111111 11111111 11111111 11111101

Java存储的整数-3即为11111111 11111111 11111111 11111101,

?

1、

对-3左移3位? ? ?-3<<3

<< ? ? >> 都是要关照符号位的,所以

11111111 11111111 11111111 11111101 左移3位后为

11111111 11111111 11111111 11101000 ,

原码为:10000000 00000000 00000000 00100111,转为整数即-24

?

2、

对-3右移3位 ? ? -3>>3 ,

就是对-3的补码11111111 11111111 11111111 11111101右移3位,结果为:

1?111?1111111 11111111 11111111 11111,由于是负数,高位需要补1(正数高位补0),而

1?111?1111111 11111111 11111111 11111

的原码为10000000 00000000?00000000?00000001,结果为-1,所以-3>>3的结果整数值为-1

?

?

3、

对-3进行无符号右移, -3>>>3,由于>>>是不顾符号的,高位全部补0,

11111111 11111111 11111111 11111101 无符号右移3位为

000?11111111 11111111 11111111 11111

由于无符号右移之后为正数,正数的补码和原码是一致的,所以?-3>>>3的值即为

000?11111111 11111111 11111111 11111

的值,变成整数输出为:0*2^31+0*2^30+0*2^29+1*2^28+1*2^27+.....+1*2^1+1*2^0=536870911

?

?

Java负整数的左移、右移、无符号右移

原文:http://jijiaa12345.iteye.com/blog/2296793

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!