我决定要好好地总结一下位运算

博客提到优秀开源项目常高效运用位运算,能提升存储效率和代码执行速度。接着开始复习位运算,介绍了左移和右移运算符,以及按位求反、与、异或、或运算符,还涉及这些运算符的作用演示、优先级和复合赋值运算符。

目录

1.引入

2. 左移和右移运算符

3. 按位求反运算符、按位与运算符、按位异或运算符和按位或运算符

3.1 作用演示

3.2 优先级

3.3 复合赋值运算符


1.引入

看了好多代码,之后觉得好多优秀的开源项目在位运算上的使用简直到了“无所不用其极”的地步,高效利用位运算,不仅仅能让我们的存储变得高效,有时候也能让我们的代码执行速度变得更强,不过还是要从最基础的复习起来,

好吧,让我们开始复习位运算!

《C程序设计》第20章-底层程序设计

(1)移位运算符
<< 左移位运算符
>> 右移位运算符



(2)按位求反运算符、按位与运算符、按位异或运算符和按位或运算符
~  按位取反
&  按位与
^  按位异或
|  按位或


运算符~是一元运算符,对其操作数会进行整数提升。
其他运算符都是二元运算符,对其操作数进行常用的算术转换。
运算符~、&、^和|对操作数的每一位执行布尔运算。~运算符会产生对操作数求反的结果,即将每一个0替换成1,
将每一个1替换成0。运算符&对两个操作数相应的位执行逻辑与运算。运算符^和|相似(都是对两个操作数执行逻
辑或运算),不同的是当两个操作数的位都是1时,^产生0而|产生1。





按位异或运算:

首先按位异或表示当两个数的二进制表示,进行异或运算时,当前位的两个二进制表示不同则为1相同
则为0.该方法被广泛推广用来统计一个数的1的位数.

参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。
即:
  0^0 = 0, 
  1^0 = 1, 
  0^1 = 1, 
  1^1 = 0
按位异或的3个特点:
(1) 0^0=0,0^1=1  0异或任何数=任何数
(2) 1^0=1,1^1=0  1异或任何数-任何数取反
(3) 任何数异或自己=把自己置0
按位异或的几个常见用途:
(1) 使某些特定的位翻转
    例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。
       10100001^00000110 = 10100111

(2) 实现两个值的交换,而不必使用临时变量。
    例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:
    a = a^b;   //a=10100111
    b = b^a;   //b=10100001
    a = a^b;   //a=00000110

2. 左移和右移运算符

3. 按位求反运算符、按位与运算符、按位异或运算符和按位或运算符

3.1 作用演示

3.2 优先级

3.3 复合赋值运算符

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值