【问题标题】:Logical operators and bit manipulation in CC中的逻辑运算符和位操作
【发布时间】:2014-05-10 18:02:45
【问题描述】:

我正在尝试做一些练习,但我被困在这一点上,我无法理解正在发生的事情,也找不到与这个特定问题相关的任何内容(找到关于逻辑运算符的其他内容,但仍然没有够了)

编辑:为什么投反对票,我很明确。没有关于 X 类型的信息,但我假设是 INT,大小也没有描述,我想通过练习我会发现。

a) At least one bit of x is '1';
b) At least one bit of x is '0';
c) At least one bit at the Least Significant Byte of x , is '1';
d) At least one bit at the Least Significant Byte of x , is '0';

我有解决方案,但如果能理解它们会很棒

a) !!x  // What happens here? The '!' Usually is NOT in c

b) !!~x // Again, the '!' appears... The bitwise operand NOT is '~' and it makes the int one's complement, no further realization made unfortunately 

c) !!(x & 0xFF) // I've read that this is a bit mask, i think they take in consideration 4 bytes in X, and this applies a mask at the least significant byte?

d) !!(~x & 0xFF) // Well, at this point i'm lost ...

我希望不必在大学逃课,但我全职工作以支付费用:(。

【问题讨论】:

标签: c++ c computer-science logical-operators


【解决方案1】:

您可以在单独的操作周围添加括号并按顺序应用它们。例如

!(!(~x))

即!!是 2 个不是

如果你执行一个 NOT,某个值会发生什么:

如果x == 0,那么!x == 1,否则!x == 0

因此,如果您要执行另一个 NOT,您将再次反转真值。即

如果x == 0,那么!!x == 0,否则!!x == 1

您可以将其视为在 0 和 1 之间获取值,其中 0 表示:“x 中没有一位是 '1'”,而 1 表示:“x 中至少有一位是 '1'”。

另外,x & 0xFF 采用变量的最低有效字节。更详尽的解释在这里:

What does least significant byte mean?

【讨论】:

  • 我认为 OP 对 ! 的双重使用感到困惑。也许你应该解决这个问题。
  • 当我使用 2 个 NOT 时会发生什么?这是我的疑问。关于掩码,我想我理解操作数“&”会发生什么
【解决方案2】:

假设 x 是一些 unsigned int/short/long/... 并且您需要条件(如果,而...):

a) 你必须知道这只是一个值/变量作为条件(没有a==b 或其他东西)
如果是0,则为false,如果不是0,则为true。因此,如果 x 不是 0 (true),则一个 ! 会将其切换为 0,而另一个 ! 将再次切换为类似于非 0 的值(不一定是旧值,仅不是 0)。如果x0,则! 最终将再次导致0(首先不是0,然后是0)。
x 的整个值不是 0 如果至少 1 位是 1...

您所做的是将 0 转换为 0 或将 1 位的值转换为 1 位的某个值。没错,但是……你可以写if(x) 而不是if(!!x)

b) ~0-bit 切换到1 和每10。现在您可以再次搜索1,因为您希望原始值中的0。同样的!!-又是一件事……

c 和 d:
&0xFF 将除最低 8 个(最低字节)之外的所有位设置为 0
A&B 的结果是一个值,如果 A 和 B 在同一位置的位都是 1,则每个位只有 10xff(十进制 255)是最低 8 位设置为 1...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    相关资源
    最近更新 更多