黑马程序员技术交流社区

标题: 为什么System.out.println(-6>>2) // 结果输出-2 [打印本页]

作者: 田峻菘    时间: 2014-10-24 23:21
标题: 为什么System.out.println(-6>>2) // 结果输出-2
为什么System.out.println(-6>>2)  // 结果输出-2
怎么不是-1,
不是按照<<或>> n位就应该*2的n次幂或/2的n次幂么?
系统运算中是按32位二进制补码运算,有符号右移也不会影响到-6吧?
求解释,谢谢!!
作者: 田峻菘    时间: 2014-10-24 23:37
自己用二进制补码算过,结果是-2,难道<<,>>只适用于正整数么?
作者: 英雄传说ER    时间: 2014-10-25 02:26
负数只能无符号右移>>>吧 因为负数的最高位是1 所以移动的时候不能拿0补位 具体再找别的老师问问吧,我一直这么认为的,也不确定对不对
作者: 戏言丶    时间: 2014-10-25 07:21
-6二进制补码为:11111111 11111111 11111111 11111010 右移两位得到:11111111 11111111 11111111 11111110;即为-2.所谓的左移乘以2的倍数右移除以2的倍数是在整除的情况下,如果没有整除那就是另当别论了
作者: 田峻菘    时间: 2014-10-25 21:30
戏言丶 发表于 2014-10-25 07:21
-6二进制补码为:11111111 11111111 11111111 11111010 右移两位得到:11111111 11111111 11111111 1111111 ...

谢谢,明白了,负数左移没问题,右移若不能整除就不能按/2的n次幂算了:)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2