如果x是像1010这样的4位字,那么你做了操作!! x,
而是返回...... 0001或... 0000。这是为什么?
答案 0 :(得分:7)
在C中,!x
是1或0,因此!!x
是"折叠为0或1运算符"在某种意义上,任何非零数字都映射到1,而0保持不变。 可以在某些场合有用。
在C ++中,!x
是bool
类型,因此!!x
是"崩溃到假或真正的运算符"在某种意义上,任何非零数字都映射到true
,零被映射到false
。
答案 1 :(得分:4)
!
运算符执行逻辑否定。如果其参数为非零,则结果为0.如果其参数为0,则结果为1.
您要描述的是按位补码运算符,由~
表示。
这些都在C standard:
的第6.5.3.3节中描述4
~
运算符的结果是其(提升的)操作数的按位补码(也就是说,结果中的每个位都设置为且仅当且 如果未设置转换后的操作数中的相应位)。该 对操作数执行整数提升,结果为 推广类型。如果提升的类型是无符号类型,则 表达式~E
等于可表示的最大值 该类型减去E
。5 如果操作数的值不等于0,则逻辑否定运算符
!
的结果为0,如果其操作数的值为1则为1 比较等于0.结果类型为int
。表达式!E
是 相当于(0==E)
。
答案 2 :(得分:2)
!
是一个布尔运算符,因此它会将数字转换为bool(任何非零值为true
,零始终为false
)。另一个!
反转了布尔。