题引
**题引是不存在的 **
1.关于原码与补码
原码:由十进制数转化为二进制数,如10:00001010(偷懒就8位 ),-25:00011001.
补码:正数的补码就是原码,负数的补码为其原码按位取反后加一(符号位不变)
位运算是由补码进行计算!!
例子(负数)
-25
原码:00011001
过程:
00011001->11100110->11100111(补码)
2.左移(<<)和右移(>>)
左移:符号位不变,右边补0(数量由具体例子决定)
右移:符号位不变,右边去除部分为(数量有具体例子决定)(如果符号位为0,左边补0;符号位为1,左边补1)
例子
1.正数的左移(10)
10<<3:00001010(补码)->01010000(80)
2.正数的右移(10)
10>>3:00001010(补码)->00000001010 (1)
3.负数的左移(-25)
-25<<3:11100111(补码)->100111000(符号位不变)->100111011(减1)->011000100(取反)(-196)
4.负数的右移(-25)
-25>>3:11100111->11111100111 *->11111011->0000100(-4)
3.与(&),或(|),异或(^)
三者都为补码运算
&:同为1才为1
| :同为0才为0
^:相同为0,不同为1
例子
1.&
10&-25:
00001010
—————
11100111
结果 :00000010(2)
2.|
10|-25
00001010
—————
11100111
结果:11101111->11101110->00010001(-17)
3.^
10^-25
00001010
—————
11100111
结果:11101111(-17)
拓展
1.异或的换值
公式:
a=a^b
b=a^b
a=a^b
此时a与b的值发生交换
例子(3,4)
a=3(0010),b=4(0100)
a=a^b
(a=0011->0110(6))
b=a^b
(b=0100->0010)
a=a^b
(a=0110->0100)
此时,a=4(0100),b=3(0010)
a与b的值发生交换
2.幂运算中的使用
幂运算中的次方数在位运算中的变化可以使用>>1来表示1
3.计算效率的加快
使用位运算计算速度与加减速度相当,会比普通乘除计算快数10倍2
补充相关优先级
位运算按照右结合律!!