抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 常用技巧 —— 位运算 —— 位运算基础

常用技巧 —— 位运算 —— 位运算基础

时间:2020-01-23 05:24:18

相关推荐

【与运算】

与运算常用于二进制的取位操作,其用符号 & 表示,相同位的两个数字都为1,则为1,若有一个不为1,则为0。

例如:00101 & 11100 = 00100

其会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值。

例如:3(11) & 2(10) = 2(10)

典型应用:任意一个数 &1 的结果就是取二进制的最末位,常用于判断数的奇偶,最末位为 0 表示该数为偶数,最末位为 1 表示该数为奇数。

【或运算】

或运算常用于二进制特定位上的无条件赋值,其用符号 | 表示,相同位的两个数字只要一个为 1 即为 1。

例如:00101 |11100 = 11101

其会将两个十进制数在二进制下进行或运算,然后返回其十进制下的值。

例如:3(11)|2(10)=3(11)。

典型应用:一个数 |1 的结果就是把二进制最末位强行变成 1,如果需要把二进制最末位变成 0,对这个数 |1 后再减一即可,其实际意义就是把这个数强行变成最接近的偶数。

【非运算】

非运算是把内存中的 0 和 1 全部取反,用符号 ~表示。

使用非运算时要格外小心,需要注意整数类型有没有符号,如果非运算的对象是无符号整数,那么得到的值就是它与该类型上界的差,因为无符号类型的数是用 00 到 $FFFF 依次表示的。

【异或运算】

异或运算,是对等长二进制模式按位执行逻辑按位异或操作,用符号 ^ 表示,如果某位不同则该位为 1,否则该位为 0。

例如:00101 ^11100 = 11001

其会将两个十进制数在二进制下进行异或运算,然后返回其十进制下的值。

例如:3(11) ^ 2(10) = 1(01)

异或运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即:(a ^b) ^b = a

【左移与右移】

1.左移运算

左移运算,用符号 << 表示,操作 a << b 就是把 a 转为二进制后左移 b 位(在后面填充 b 个 0),实质上就是 a 乘以 2 的 b 次方,因为在二进制数后添一个 0 就相当于该数乘以 2。

例如:100(1100100) << 2 = 400(110010000)

通常认为,a <<1 比 a*2 要更快,因为前者是更底层的操作,因此程序中乘以 2 的多少次方的操作尽量用左移位来代替。

2.右移运算

右移运算,用符号 << 表示,操作 a >> b 就是把 a 转为二进制后右移 b 位(去掉末尾b 个 0),实质上就是 a 除以 2 的 b 次方(取整)。

例如:400(110010000) >>2 = 100(1100100)

通常认为,a >>1 比 a/2 要更快,因为前者是更底层的操作,因此程序中除以2 的多少次方的操作尽量用右移位来代替。

如果觉得《常用技巧 —— 位运算 —— 位运算基础》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。