整数的按位非~运算与移位运算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ecnuThomas/article/details/53073610

1,按位非运算

例:   System.out.println(~-5);  //输出结果为4 。解释如下:

第一步: -5的原码:

1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 1

第二步:原码取反,符号位保持不变得到-5的反码:

1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 0 1 0

第三步:反码加1得到-5的补码:

1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 0 1 1
,

第四步:非运算是所有位取反:得到~-5的补码结果

0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0

(由于正数的补码和原码相同,所以结果就是4)


2,移位操作:

例:System.out.println(-5 << 2); //结果是-20

1,得到-5的移码: 
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 0 1 1

2,左移两位,得到的是某个数的移码
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 0 1 1 0 0

3,该数减一,得到反码:
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 0 1 0 1 1

4,反码取反,符号位不变,得到该数的原码:
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 0 1 0 0
 
故,该数为-20



猜你喜欢

转载自blog.csdn.net/ecnuThomas/article/details/53073610
今日推荐