我正在尝试学习 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,但我不太明白这个语句在做什么。
有什么方法可以重写此代码以使其更易于理解,以便它不使用此按位运算符?我发现它们很难理解,所以希望有人能指出正确的方向来理解它们如何更好地工作!
我现在对位运算符有了更好的理解,整个代码现在更有意义了。
最后一件事:显然没有人回应是否会有一种“更清洁”的方式来重写此代码,使其更易于理解,并且可能不是“位级”。有任何想法吗?