C++ C语言中的逻辑运算符和位操作
我试图做一些练习,但我被困在这一点上,我无法理解发生了什么,也找不到与这一特定问题相关的任何东西(找到了关于逻辑运算符的其他内容,但仍然不够) 编辑:为什么要投否决票,我说得很清楚。没有关于X类型的信息,但我假设是INT,大小也没有描述,我想通过练习我会发现这一点。C++ C语言中的逻辑运算符和位操作,c++,c,computer-science,logical-operators,C++,C,Computer Science,Logical Operators,我试图做一些练习,但我被困在这一点上,我无法理解发生了什么,也找不到与这一特定问题相关的任何东西(找到了关于逻辑运算符的其他内容,但仍然不够) 编辑:为什么要投否决票,我说得很清楚。没有关于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
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 ...
我不想在大学里逃课,但为了支付学费,我全职工作:(。你可以在单独的操作周围加上括号,并按顺序应用它们
!(!(~x))
i、 e.!!是2不是
如果不执行某个值,则该值会发生以下情况:
如果x==0
,则!x==1
,否则!x==0
因此,如果你想执行另一个NOT,你需要再次反转真值
如果x==0
,则!!x==0
,否则!!x==1
您可以将其视为获取介于0和1之间的值,其中0表示:“x的任何位都不是‘1’”,1表示:“x的至少一位是‘1’”
另外,x&0xFF
取变量的最低有效字节。此处有更详细的说明:
假设x是一些
无符号int/short/long
/…并且需要条件(如果,while…):
a) 您必须知道,只有一个值/变量作为条件(没有a==b
或其他东西)如果是
0,则为false
;如果不是0,则为true。因此,如果x
不是0
(true
),那么一个代码>将切换到0
和另一个再次将代码>设置为与0不同的值(不一定是旧值,只是不是0)。如果x
为0
,则
最终将再次导致0
(首先不是0
,然后是0
)。
如果至少1位为1,则x
的整个值不是0
您要做的是将0转换为0或将一个1位值转换为一个1位值。没错,但是。。。您可以只编写if(x)
而不是if(!!x)
b) ~
将每个0
-位切换到1
,并将每个1
切换到0
。现在您可以再次搜索1
,因为您希望原始值为0
。同样的-再说一遍
c和d:
&0xFF
将除最低8位(最低字节)之外的所有位设置为0
A&B
的结果是一个值,其中,如果位于同一位置的A和B的位均为1
,则每个位仅为1
0xff
(十进制255)是将最低8位设置为1
。x的类型是什么?相信我,如果有关于x类型的任何信息,我会把它放进去。没有这方面的任何信息!没有,答案都是正确的代码>。这表明你省略了一些提问文字。我认为OP对的双重使用感到困惑代码>。也许你应该解决这个问题。当我使用2个not时会发生什么?这是我的疑问。关于掩码,我想我知道操作数“&”会发生什么