目前正在研究逐位算术。这很简单,因为我有一些CS背景。但我只是不明白这个操作员的那一刻。
例如:
variable3 = variableOne & 3;
或
variable3 &= 3;
实际上这没关系。
我不明白如何将位设置为0的过程。以及如何在纸上处理它?</ strong>
答案 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
z
为x&y
。
啊哈,根据你在邻居答案中的评论判断问题出在其他地方。数字变量中不包含“十六进制值”。数字变量包含表示数字的位模式。 “数字”绝不是二进制,十进制或十六进制。当你说“三个”时,没有数字系统在起作用,三个是三个,无论如何。
当您在源代码中说出var x = 0x76
之类的内容时,机器会读取数字的十六进制表示形式,创建表示此数字的位模式并将其存储在与变量对应的内存中。然后当你说x &= 3
之类的东西时,机器会创建一个代表三号的位模式,将它与存储在变量中的位模式相结合,并将结果存储在变量中。