关于java的位运算

来源:百度知道 编辑:UC知道 时间:2024/06/30 17:49:24
>>> 是什么来的???? 作用是什么

-4是int类型
-4>>>1 为什么是 2147483646

听说负数用补码形式储存 java的int类型是32位2进制 我先算补码在移位求得的是2147483647 怎么回事 然后我把int改为short 还是2147483646 short不是16位2进制是 转成补码再移位最大应该只有32767啊??

-4>>1 为什么是-2
这个过程怎样的?

6>>-1 是什么东西??
晕 我知为什么了 原来打少了最后那个0

那6>>-1是什么东西

我想你应该了解一下二进制中怎么表示负数

数字的正负是由最高位决定的,如果是int 就是最左边第32个bit决定
那么向右移动的时候 这个数也会移动 如果是负数 那么移动之后由于1会动 所以会变成正数(原来的补0,当然也有保留符号的移动,会补和最左边相同的bit)

java中 >>是普通位移 而>>>是保留符号位移 那么你算一下-4二进制向右有符号位移之后是什么

java有个特性 表达式中参与计算的所有值都会最起码转换到int 即使是short和byte计算也是一样 如果你直接把位移结果out出来 那么他是一个int 当然有那么多

-4十进制数它的二进制表示形式就是4的二进制形式取反位数+1
4是int类型的,int是32位的
二进制形式0000 0000 0000 0000 0000 0000 0000 0100
所以可得-4的表示形式为1111 1111 1111 1111 1111 1111 1111 1100
>>>是无符号位移运算符,所有位右移高位补0
结果0111 1111 1111 1111 1111 1111 1111 1110
要变回十进制只要把上面的过程翻过来先-1在取反
1000 0000 0000 0000 0000 0000 0000 0010
这里因为int已经不够存储这个数据了,所以他会自动转换到更大的类型
long型。

-4 >> 2
有符号位移和上面的不同处只在于如果是负数高位会补1

http://zhidao.baidu.com/question/73138577.html
6>>-1向右移一位。