按位算术和运算符

时间:2012-03-03 08:52:45

标签: objective-c c math operators bit-manipulation

目前正在研究逐位算术。这很简单,因为我有一些CS背景。但我只是不明白这个操作员的那一刻。

例如:

variable3 = variableOne & 3;

variable3 &= 3;

实际上这没关系。

我不明白如何将位设置为0的过程。以及如何在纸上处理它?<​​/ strong>

1 个答案:

答案 0 :(得分:2)

我们说5&3,四位宽:

0101b = 5dec
0011b = 3dec
------------
0001b = 1dec

您只需&同一列中的位。由于&运算符只在两个参数都为1时才返回1,因此5中不存在的3中的较高位会被屏蔽掉。


至于评论中的例子:

$ perl -E 'printf "%b\n", 0x76'
1110110

现在:

1110110 = 0x76
0000011 = 3dec
-------
0000010 = 2dec

......只是为了验证:

$ perl -E 'say 0x76&3'
2

架构很简单,每列只需&

x
y
-
z

zx&y


啊哈,根据你在邻居答案中的评论判断问题出在其他地方。数字变量中不包含“十六进制值”。数字变量包含表示数字的位模式。 “数字”绝不是二进制,十进制或十六进制。当你说“三个”时,没有数字系统在起作用,三个是三个,无论如何。

当您在源代码中说出var x = 0x76之类的内容时,机器会读取数字的十六进制表示形式,创建表示此数字的位模式并将其存储在与变量对应的内存中。然后当你说x &= 3之类的东西时,机器会创建一个代表三号的位模式,将它与存储在变量中的位模式相结合,并将结果存储在变量中。