Java中的 << , >> , 和 >>>所代表的含义 |
您所在的位置:网站首页 › 妹是什么意思和含义 › Java中的 << , >> , 和 >>>所代表的含义 |
标题 Java中的 > , 和 >>>所代表的含义
1.2,表示将8向右移动2位,结果为2。高位补0。 右移一位相当于除以二 二进制演算: 8的二进制:1 0 0 0 向右移动两位:0 0 1 0即为2,右移就是将数变小
3.>>>表示无符号右移运算符。高位补0
例如8>>>2表示将8向右移位2位,结果为2。 这个在正数时也可以和右移运算符一起理解。 但是在负数时就不一样了 举个例子: 将15右移无符号右移两位: 15>>>2 15的二进制是:1 1 1 1,右移两位变为 :0 0 1 1 ,转换成二进制为:3 那么-15>>>2 又是多少呢?,先求得-15的二进制,往下看 Demo:求-15>>2 和 -15>>>2解释:一个是带符号右移两位,一个是无符号右移两位。 区别:看下面的讲解基本就明白了! 一个二进制的正数的原码和反码和补码是相同的,负数就不一样了。 要知道一个完整的二进制是由32位表示的 -15的完整二进制为: 10000000 00000000 00000000 00001111-15的反码为: 11111111 11111111 11111111 11110000 (反码:将二进制数除符号位外取反,所得的新二进制数为反码)-15的补码为: 11111111 11111111 11111111 11110001 (补码:反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码最右边的位加上1即为补码。)求-15>>2 将-15的补码带符号右移两位 -15的补码为: 11111111 11111111 11111111 11110001 将-15的补码带符号右移两位: 11111111 11111111 11111111 11111100 不懂看图解 图解: 求值: 将补码无符号右移后的结果保留符号位其余的位取反: 10000000 00000000 00000000 00000011 然后+1,即为最后的结果: 10000000 00000000 00000000 00000100 结果为-4 求-15>>>2 将-15的补码无符号右移两位 -15的补码为: 11111111 11111111 11111111 11110001 将-15的补码无符号右移两位: 00111111 11111111 11111111 11111100 图解 求值: 将-15的补码无符号右移两位后直接求结果: 00111111 11111111 11111111 11111100 结果为:1073741820 验证: 总结: 正数的左右移管它是有符号还是无符号,直接在原码的基础上移动,并求结果就好了负数的左右移区别在有符号左右移和无符号左右移 有符号的左右移: 第一步 — 求出负数的补码 ,第二步 — 将补码左右移,第三步 — 高位不变其余取反,最后一位再加1 无符号的左右移: 第一步 — 求出负数的补码 ,第二步 — 将补码左右移,第三步 — 直接求结果 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |