位运算

空扰寡人 提交于 2019-11-26 02:49:12

题引

**题引是不存在的 **

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

补充相关优先级


位运算按照右结合律!!


  1. 幂运算的具体过程此处省略 ↩︎

  2. 位运算比乘法快近10倍,除法按位数(近20倍——8位,近30倍——16位,40倍以上——32位) ↩︎

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!