目录
概念
位运算分为2类:
1,逻辑位运算符
1,位与&
位与是二元运算符,进行位与运算时,转换为二进制从高到低进行运算
其运算法则为:
相同为1,不同为0
十进制 二进制 结果
12 1100
& & 1000(二进制) == 8(十进制)
10 1010
2,位或|
位或是二元运算符,进行位或运算时,转换为二进制从高到低进行运算
运算法则为:
有一则一,同0则0
十进制 二进制 结果
12 1100
| | 1110(二进制) == 14(十进制)
10 1010
3,异或^
异或是二元运算符,进行异或运算时,转换为二进制从高到低进行运算
运算法则为:
相同为0,不同为1
十进制 二进制 结果
12 1100
^ ^ 0110(二进制) == 6(十进制)
10 1010
4,按位取反~
按位取反是一元运算符,将当前数字转换为二进制后,0变1,1变0
八位整数 ~1010
= 1111 0101
要求为八位整数,但只有四位,所以要向高位取四位为0000 1010,取反后为上述结果
十六位整数 ~1010
=1111 1111 1111 0101
***************高位不足位数默认为0*********************************
2,位移运算符
1,左移
左移是二元运算符,x<<y,即将x转换为二进制,对其所有位向左偏移y位,末尾y位补零。
所以左移一位可以看作对x乘以2
左移一位操作
0001 --> 0010 1向左移动一位,在其空缺位置补零
1(十进制) 2(十进制)
左移俩位操作
0001 --> 0100 1向左移动俩位,在其空缺位置补零
1(十进制) 4(十进制)
左移三位操作
0001 --> 1000 1向左移动三位,在其空缺位置补零
1(十进制) 8(十进制)
由上可得,x左移y位,则x乘以2^y。
2,右移
左移是二元运算符,x>>y,就是将x转换为二进制,对其所有位向右移动y位。和左移不同的是,如果x是非负数,则高位补零,如果x是负数,则高位补一。所以右移一位,可以看作对x除2,并向下取整
12(十进制)-->1100(二进制)
右移一位,由于12是非负数,所以右移一位后高位补零
1100
0110 == 6(十进制)
右移俩位
1100
0011 == 3(十进制)
右移三位
1100
0001 == 1(十进制)//12除以2^3有余数,但要向下取整,所以为1
注意
在计算机中,运算是使用的二进制补码。
关于正负数的原码反码补码:
正数的二进制补码为它本身,而负数却不同。负数的反码是符号位不变,其余按位取反,补码则在反码基础上+1
12(十进制)
0000 1100(二进制源码)
0000 1100(二进制反码)
0000 1100(二进制补码)
-12(十进制)
1000 1100(二进制源码)
1111 0011(二进制反码)
1111 0100(二进制补码)
运算符的优先级