位运算
-
按位与(
&):同 1 为 1, 其余为 0按位与运算。按位与运算符&是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现. -
按位或(
|):同 0 为 0, 其余为 1按位或运算。按位或运算符|是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现. -
按位异或(
^):相同为 0, 不同为 1按位异或运算。按位异或运算符^是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现. -
按取反(
~):0变1, 1变0求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。 -
左移(
<<):高位丢弃,低位补0左移运算<<是双目运算符。其功能把<<左边的运算数的各二进位全部左移若干位,由<<右边的数指定移动的位数, 高位丢弃,低位补0。 -
右移(
>>):低位丢弃,高位补0右移运算>>是双目运算符。其功能把>>左边的运算数的各二进位全部右移若干位,由>>右边的数指定移动的位数, 低位丢弃,高位补0。
左移 n 位, 相当于扩大到 倍
右移 n 位, 相当于缩小到 倍
1、原码
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111]
即[-127 , 127]
原码是人脑最容易理解和计算的表示方式。
2、反码
反码的表示方法是:正数的反码是其本身。负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数,人脑无法直观地看出来它的数值。通常要将其转换成原码再计算。
3、补码 补码的表示方法是:正数的补码就是其本身。负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)。
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码在计算其数值。