java 三种运算符理解

2018-04-09  本文已影响0人  Aiden_Wu

>> : 右移运算符;低位移出,符号位不变

<< : 左移运算符;高位移出,符号位不变

>>> : 无符号右移;

先理解下原码、补码、反码;

举个栗子:

10

原码:0000 0000 0000 0000 0000 0000 0000 1010

补码:0000 0000 0000 0000 0000 0000 0000 1010

反码:0000 0000 0000 0000 0000 0000 0000 1010

正数的原码、补码、反码都一样

-10

原码:1000 0000 0000 0000 0000 0000 0000 1010

反码:1111 1111 1111 1111 1111 1111 1111 0101

补码:1111 1111 1111 1111 1111 1111 1111 0110

负数的原码:高位数为符号位1;反码则符号位不变,其他位取反,0 -> 1,1 ->0;

补码则是反码+1;

计算机都是补码来存储的;

10 << 1  左移一位 

0000 0000 0000 0000 0000 0000 0000 1010 把左边踢去一位,右边用0补齐;

0000 0000 0000 0000 0000 0000 0001 0100  十进制为20;

-10 << 1 左移一位 

1111 1111 1111 1111 1111 1111 1111 0110  符号位不变,把左边踢去一位,右边用0补齐;

1111 1111 1111 1111 1111 1111 1110 1100   十进制为-20;

10 >> 1  右移一位 

0000 0000 0000 0000 0000 0000 0000 1010 把右边踢去一位,左边用0补齐;

0000 0000 0000 0000 0000 0000 0000 0101  十进制为5;

-10 << 1 左移一位

1111 1111 1111 1111 1111 1111 1111 0110  符号位不变,把右边踢去一位,左边用0补齐;

1111 1111 1111 1111 1111 1111 1111 1011   十进制为-5;

而>>>比较特别无符号位,不管是正数负数,高位都用0补齐(符号位也变),正数>>>跟>>一样;负数则有区别;

-10 >>> 1 

1111 1111 1111 1111 1111 1111 1111 0110  把右边踢去一位,左边用0补齐;

0111 1111 1111 1111 1111 1111 1111 1011  下图分别输出:

上一篇 下一篇

猜你喜欢

热点阅读