300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 位运算的一些技巧总结

位运算的一些技巧总结

时间:2024-08-15 19:38:36

相关推荐

位运算的一些技巧总结

位运算

这里主要总结一些位运算的基础用法,不从位运算的运算过程展开了:

1.&(and)运算

&运算通常用于二进制取位操作,例如一个数 & 1的结果就是取二进制的最末位。

基础用法:

(1)可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。

(2)x & (x-1) 用于消去 x 的最后一位 1。

(3)在运用(2)的基础上可以用来判断一个正整数是不是2的整数幂次,如果x & (x-1) 是0,说明是;如果不是0,说明不是;

2.| (or)运算

|运算通常用于二进制特定位上的无条件赋值,例如一个数 | 1的结果就是把二进制最末位强行变成1。

基础用法:

(1)如果需要把二进制最末位变成0,对这个数or 1之后再减一就可以了,其实际意义就是把这个数强行变成最接近的偶数。

(2)

3.^(xor)运算

^运算通常用于对二进制的特定一位进行取反操作,因为异或可以这样定义:0和1异或0都不变,异或1则取反。

基础用法:

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

(2)一个数 a^a=0;

(3)运用(1)可以延伸很多用法,比如判断一个数组里面出现一次的数(其他的数出现两次);

(4)是第(3)的进阶,有一个 n 个元素的数组,除了两个数只出现一次外,其余元素都出现两次,让你找出这两个只出现一次的数分别是几?

这道题的思路是把所有元素都异或,那么得到的结果就是那两个只出现一次的元素异或的结果。然后把这个结果转化为二进制,找到为 1 的一个位置,根据这个位置是否为1把数组里所有的元素分成两部分;然后两部分分别异或,得到的就是两个只出现一次的数;

4.这几种常见的位运算运算性质

(1)信息丢失

位运算中“与”、“或”会造成信息丢失,他们是单向运算,不可逆运算。

但是“异或”不会,例如:

x ^ a = y;

当a 确定时,x与y 一一对应,且

x = y ^ a;

(2)运算性质

一般情况下,结合律和分配律是失效的,只有交换律能安全使用。

例如:

交换律:

a | b=b | a;

a ^ b=b ^ a;

a & b=b & a;

结合律:

(3|1)&2=2;

3|1&2=3;

分配律:

(4|3)^1=6;

(4 ^1 ) | ( 3 ^1)=7;

但是对于单一的位运算来说,结合律都是符合的,其实就是变为了交换律;

贴一张用法大全图:

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