每日总结:运算符(2021.9.30)
算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符(三元运算符)不做分析
位运算:
&:如果相对应位都是1,则结果为1,否则为0
丨:如果相对应位都是 0,则结果为 0,否则为 1
^:如果相对应位值相同,则结果为0,否则为1
〜:按位取反运算符翻转操作数的每一位,即0变成1,1变成0;
<< :按位左移运算符。左操作数按位左移右操作数指定的位数。
>> :按位右移运算符。左操作数按位右移右操作数指定的位数。
>>>:按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。
对于负数的左移或右移
为什么会-10的二进制会出现这么多的1呢?仔细数一下刚好有32位。首先需要了解的是Java负数存储是以补码形式存储的(补码=反码+1),10的二进制是1010,它的反码就是0101,再加1就是补码0110。那为什么会多出来那么多1呢?这是因为int型在Java中占8个字节,刚好32位,10原码的高位全是0,它的反码自然高位就变成了1。所以整体左移2位,低位以0补齐,最后的运算结果就是x = (|x| + 2^n)。
instanceof运算符:
例子:
String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真

浙公网安备 33010602011771号