冰凌汇编

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 89|回复: 0
收起左侧

[C++] C/C++ 位运算

[复制链接]
bigbang 发表于 2022-5-24 22:45:13

我们首先回顾 C/C++ 位逻辑运算符

和               &
或者             |
异或            ^
补充            ∼

使用真值表很容易看出这些运算符的作用。 为了说明真值表的工作原理,请考虑二进制加法的算法。 在第 3.1 节(第 66 页)中,我们看到结果中的第 i 位是一个数字的第 i 位加上另一个数字的第 i 位加上第 (i-1) 位相加产生的进位之和。 这个总和将产生零或一的进位。 换句话说,位加法器有三个输入——两个数字相加的两个对应位和前一个位相加的进位——以及两个输出——结果和进位。 在真值表中,每个输入和每个输出都有一列。 然后我们写下所有可能的输入位组合,然后在相应的行中显示输出。 位加法运算的真值表如图 3.3 所示。 我们使用符号 x[i] 来表示变量 x 中的第 i 位; x[i-j] 将指定位 i 到 j。

x[i] y[i] carry[(i-1)] z[i] carry[i]
0 0 0 0 0
0 1 0 1 0
1 0 0 1 0
1 1 0 0 1
0 0 1 1 0
0 1 1 0 1
1 0 1 0 1
1 1 1 1 1

上表:将前一个位相加的进位相加的真值表。 x[i] 是 x 的第 i 位; 进位 [(i-1)] 是添加第 (i-1) 位的进位。

位逻辑运算符作用于两个操作数的相应位,如下图所示。

C/C++ 位运算 - bigbang_冰凌汇编

上图:显示按位 C/C++ 运算的真值表。 x[i] 是变量 x 中的第 i 个位。

示例 3-m
int x = 0x1234abcd。 用 0xdcba4321 计算与、或和异或。

解决方案:

x & 0xdcba4321 = 0x10300301
x | 0xdcba4321 = 0xdebeebed
x ^ 0xdcba4321 = 0xce8ee8ec

确保将这些按位逻辑运算符与 C/C++ 逻辑运算符 &&||! 区分开来。 逻辑运算符处理组织成整数数据类型的位组,而不是单个位。 为了比较,C/C++ 逻辑运算符的真值表如下图所示

C/C++ 位运算 - bigbang_冰凌汇编

上图:显示 C/C++ 逻辑运算的真值表。 x 和 y 是整数数据类型的变量。

冰凌汇编免责声明
以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|站点统计|Archiver|小黑屋|RSS|冰凌汇编 ( 滇ICP备2022002049号 滇公网安备 53032102000029号)|网站地图

GMT+8, 2022-10-6 22:47 , Processed in 0.127528 second(s), 8 queries , Redis On.

冰凌汇编 - 建立于2021年12月20日

Powered by Discuz! © 2001-2022 Comsenz Inc.

快速回复 返回顶部 返回列表