【发布时间】:2010-10-15 07:07:16
【问题描述】:
我正在努力学习 C 编程,我正在研究一些源代码,有些东西我不明白,尤其是关于位运算符。我阅读了一些关于这方面的网站,对它们的作用有所了解,但是当我回头查看这些代码时,我无法理解它们为什么以及如何使用它们。
我的第一个问题与位运算符无关,而是一些 ascii 魔法:
-
有人可以向我解释一下下面的代码是如何工作的吗?
char a = 3; int x = a - '0';我知道这样做是为了将 char 转换为 int,但是我不明白它背后的逻辑。为什么/如何工作?
-
现在,关于按位运算符,我感觉真的很迷茫。
-
这段代码有什么作用?
if (~pointer->intX & (1 << i)) { c++; n = i; }我在某处读到 ~ 反转位,但我看不到该语句在做什么以及为什么这样做。
与此行相同:
row.data = ~(1 << i); -
其他问题:
if (x != a) { ret |= ROW; }|= 运算符到底在做什么?根据我的阅读,|= 是 OR,但我不太明白这个语句在做什么。
有没有什么方法可以重写这段代码以使其更容易理解,这样它就不会使用这个按位运算符?我发现它们很难理解,所以希望有人能指出正确的方向来理解它们如何更好地工作!
-
我现在对位运算符有了更好的理解,整个代码现在更有意义了。
最后一件事:显然没有人回应是否会有一种“更干净”的方式来重写此代码,使其更易于理解,并且可能不在“位级别”。有什么想法吗?
【问题讨论】:
-
按位代码使用的上下文是什么?我可以解释如何它是如何工作的,但没有上下文,不知道为什么..
-
如果您有其他问题,您可能需要单独提交。您在这里有 3 个问题。它有两个优点: * 下面的一些答案只回答了其中一个问题。如果您分别提交它们,将很清楚正在回答哪个问题。 * 更多问题 ==> 更多支持 :)
标签: c++ c bit-manipulation bitwise-operators