我正在尝试做一些练习,但我仍然坚持这一点,在那里我无法理解发生了什么,并且无法找到与此特定事项有关的任何事情(找到关于逻辑运算符的其他内容,但仍然不够)
编辑:为什么downvote,我很明确。没有关于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 ...
我希望不要在大学上课,但我全职工作以支付费用:(。
答案 0 :(得分:3)
您可以在单独的操作周围添加括号并按顺序应用它们。 e.g。
!(!(~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
获取变量的最低有效字节。这里有更全面的解释:
答案 1 :(得分:1)
假设x是某个unsigned int/short/long
/ ...并且您想要条件(如果,而......):
a)你必须知道只有一个值/变量作为条件(没有a==b
或其他)
如果是false
,则为0
;如果不是0
则为{}。因此,如果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)是设置为1
的最低8位的数字......