ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

位运算

2022-07-09 11:34:57  阅读:129  来源: 互联网

标签:运算 二进制 1111 异或 按位 1001


按位与

and 或者 & (前者为Pascal,后者位C++,下同)

定义:两者都为1时,结果为1,否则为0。

例:1001 & 1111 = 1001

	1101 & 0001 = 0001

用处:

and运算通常用于二进制的取位操作。

  • 判断奇偶

例如一个数 and 1的结果就是取二进制的最末位。

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

  • 对一个16位数高8位清零,低8位保留。

    int x=6550;		x=x&255;	printf("%d ",x);
    //6550 = 1 1001 1001 0110
    //255 = 1111 1111
    //高8位补0,低8位与1并后不变,实现清0。
    //x = 150
    
  • 从右边开始,把最后一个1改写成0

    x & (x-1)
    

按位或

or 或者 |

定义:两者都为0时,结果为0,否则为1。

例:1001 | 1111 = 1111

	1101 | 0001 = 1101

用处:

or运算通常用于二进制特定位上的无条件赋值。

  • 例如一个数or 1的结果就是把二进制最末位强行变成1。

如果需要把二进制最末位变成0,对这个数or 1之后再减一就可以了。

其实际意义就是把这个数强行变成最接近的偶数。(2变成2,3变成2,避免奇偶判断)

n = (n|1) - 1;

按位异或

xor 或者 ^

**定义:两者相同时为1,不同为0。 **

例:1001 ^ 1111 = 1001

	1101 ^ 0001 = 0011

用处

  • 不用临时变量交换两个变量:
void swap(int &x,int &y)//记得传址
{x = x^y; y = y^x; x = x^y;}

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

所以上面,就是$ y = y | (x | y) = x | y | y = x$,

这个时候,\(x=x|y\)就变成了第三变量,

再让 \(x|y\) (这时 \(y\) 是 \(x\) 的值)就回到 \(y\) 。

  • 同理,也可以用这个来加密:

设定一个密钥,做异或运算加密,再做异或运算解密。

按位取反

not 或者 ~

定义:按位取反

~0 = 1

用处:

  • 逻辑判断

  • 如果not的对象是无符号整数(不能表示负数),那么得到的值就是它与该类型上界的差。

左移

shl 或者 <<

定义:向左移动x位,数值大小变为原来的 \(2x\) 倍。

例:1111 << 10(2) = 111100

右移

shr 或者 >>

定义:向右移动x位,数值大小变为原来的 \(1/2x\) 倍。

(所以它可以用来多次除2。比如:二分查找,来提高程序效率。)

注:向下取整

例: 1111 >> 10(2) = 11

  • 取出一个16位数的高8位。

    int x=6550;	x=x&(65535-255);	x=x>>8;	printf("%d ",x);
    

总注

  • C++中的 $ and$ 与 \(or\) 替代的是 && 与 || ,并非位运算符
  • 运算优先级:(<<、>>)、(*、/)、(+、-)、~、&、^、|

标签:运算,二进制,1111,异或,按位,1001
来源: https://www.cnblogs.com/cyl-oi-miracle/p/16460473.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有