UltraDebug

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: A C D R G Y M Z X S P
公益项目,接受捐赠
查看: 2080|回复: 0
收起左侧

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

[复制链接]
bigbang

主题

0

回帖

UD

新手上路

UID
45
积分
25
注册时间
2022-5-18
最后登录
1970-1-1
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_UltraDebug

上图:显示按位 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_UltraDebug

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

UltraDebug免责声明
✅以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
✅The above content is forwarded or original by netizens. If there is infringement, please send the email to the destination 9003554@qq.com handle.
回复 打印

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|站点地图|UltraDebug ( 滇ICP备2022002049号-2 滇公网安备 53032102000034号)

GMT+8, 2025-6-18 07:07 , Processed in 0.033894 second(s), 12 queries , Redis On.

Powered by Discuz X3.4

© 2001-2023 Discuz! Team.

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