一直以来位移运算符都用的很少,所以一直忽略了它。不过今天突然明白了规则于是乎就上网翻看了一下别人的一些博客,验证了自己的想法,没想到还真是这样的,很是欣慰呀,至少以后在看到此类东西不会一头雾水了。以下内容包含网上查找的内容
-
<< 左移运算符
表达式:value << num
左移的规则:
丢弃最高位,0补最低位
按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
当左移的运算数是int 类型时,每移动1位它的第31位就要被移出并且丢弃;
当左移的运算数是long 类型时,每移动1位它的第63位就要被移出并且丢弃。
当左移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。
计算过程:
举例:8是int型的情况下8<<3结果等于64,相当于8×2的3次方
把8转换为二进制数字0000 0000 0000 0000 0000 0000 0000 1000,
把这组数字左移3位则得到的最终结果是0000 0000 0000 0000 0000 0000 0100 0000, -
>> 右移运算符
表达式:value >> num
左移的规则:
符号位不变,左边补上符号位
按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
当右移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。
如果要移走的值为负数,每一次右移都在左边补1,如果要移走的值为正数,每一次右移都在左边补0,这叫做符号位扩展(保留符号位),在进行右移操作时用来保持负数的符号。
计算过程:
35 >> 2(35为int型)35 >> 2结果等于8,相当于8/2的2次方
35转换为二进制:0000 0000 0000 0000 0000 0000 0010 0011
把低位的最后两个数字移出:0000 0000 0000 0000 0000 0000 0000 1000
转换为十进制: 8 -
>>> 无符号右移运算符
表达式:value >>> num
无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位
无符号右移运算符>>> 只是对32位和64位的值有意义
补充一下之前欠缺的:0x8f,此16进制数转换为二进制位1000 1111,
通常颜色用16进制数
例如:0xFBFFFFFF,从左往右FB表示透明度,FFFFFF表示颜色
用二进制表示就是:
1111 1011 1111 1111 1111 1111
网友评论