今天不知为啥突然想知道 移位运算符 是怎么进行计算的。
>> 带符号右移
带符号右移,将整数换为二进制 向右移动一位 并且 正数在最高位添0,负数在最高位添 1。
例:
- 正数
10>>1 就相当于(1010)右移一位 最高位添0 —>(0101)转为十进制也就是 5(其实正数的带符号左右移 就相当于 乘以(左移)/除以(右移)2的n次方(这里的n指的是 符号右边的数值))
- 负数
-10>>1 相当于(1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 0110)右移一位 最高位添 1 —>(1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1011)也就是 -5
<<带符号左移
跟右移恰恰相反 是往左移动的,此处略过。。。
>>> 无符号右移
意思就是 往右移动不带符号,不论正的负的 右移之后 都在最高位添 0;
1.正数
正数无符号右移跟有符号右移是一样的 不涉及变号问题,重点在 负数 会变号
2.负数
负数除了同样的右移之外 会在最高位 添个零 大家都知道 最高位符号位 0代表正 1代表负 本来是负数的 最高位符号位添了 0 就变为正数了。
例:
-1>>>1 也就是(1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111)右移一位 之后最高位 添 0 就变为 (0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111)转为十进制就是 2,147,483,647
That 's all ,有错误欢迎指出,错误必当改正!