【问题标题】:Bitwise Arithmetic and Operators按位算术和运算符
【发布时间】:2012-03-21 15:13:01
【问题描述】:

目前正在学习按位算术。这真的很容易,因为我有一些CS背景。但是我只是一时不理解这个操作员。

例如:

variable3 = variableOne & 3;

variable3 &= 3;

其实这无关紧要。

我不明白将位设置为 0 的过程是如何进行的。以及如何在纸上处理它?

【问题讨论】:

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


【解决方案1】:

假设5&3,四位宽度:

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

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


至于你在 cmets 中的例子:

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

现在:

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

...只是为了验证:

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

架构很简单,你只需&每一列:

x
y
-
z

zx&y


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

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

【讨论】:

  • 哦..是的..谢谢。真的很容易理解。所以现在会练习)))
  • F 例如:varibleOne = 0x76;变量一 &= 3;它是如何工作的
猜你喜欢
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2014-06-06
相关资源
最近更新 更多