5 回答

TA贡献1877条经验 获得超6个赞
“>>>”运算符所作的是无符号的位移处理,它不会将所处理的值的最高位视为正负符号,所以作位移处理时,会直接在空出的高位填入0。当我们要作位移的原始值并非代表数值时(例如:表示颜色图素的值,最高位并非正负号),可能就会需要使用此种无符号的位移。比如:
-10>>>2=1073741821
-10=1111 1111 1111 1111 1111 1111 1111 0110 (不管原来的“符号”位的值(一长串1),空上的全部直接填0)
0011 1111 1111 1111 1111 1111 1111 1101=1037341821
~ 按位非(NOT)(一元运算)
& 按位与(AND)
| 按 位或(OR)
^ 按位异或(XOR)
>> 右移
>>> 右移,左边空出的位以0填 充
运算符 结果
<< 左移
&= 按位与赋值
|= 按位或赋值
^= 按 位异或赋值
>>= 右移赋值
>>>= 右移赋值,左边空出的位以0填充
<<= 左 移赋值

TA贡献1900条经验 获得超5个赞
示符号,0位正,1为负)
无论>>还是>>>都是针对二进制数进行操作的。
1、右移运算符>>使指定值的所有位都右移规定的次数。右边移出去的部分扔掉不要,左边空出来的部分用原来的数字填充(这就是所谓的带符号右移)
——比如说5,右移后为00000010。
——你给的例子,假设x=-12,表示为32位int型就是
11111111111111111111111111110100
x>>3即带符号右移3位,结果是
11111111111111111111111111111101,化为十进制等于-3
2、>>>与>>唯一的不同是它无论原来的最左边是什么数,统统都用0填充。
——比如你的例子,byte是8位的,-1表示为byte型是11111111(补码表示法)
b>>>4就是无符号右移4位,即00001111,这样结果就是15。
添加回答
举报