为什么双重否定力值成为布尔?
如果x是像1010一样的4位字,并且您执行了操作!! x,
相反,它返回... 0001或... 0000。 为什么是这样?
在C中, !x
是1或0,因此!!x
是一个“折叠为0或1运算符”,意思是任何非零数字映射为1,并且0保持原样。 这在有些情况下很有用。
在C ++中, !x
是一个bool
类型,因此!!x
是“折叠为假或真运算符”,意思是任何非零数字映射为true
,零映射为false
。
!
运算符执行逻辑否定。 如果它的参数非零,则结果为0.如果参数为0,则结果为1。
你所描述的是按位补数运算符 ,用~
表示。
这些都在C标准的第6.5.3.3节中描述:
4的结果~
操作者是其(推动)操作数的按位求补(即,结果中的每个位被设置当且仅当在转换操作数的相应位没有被设置)。 整数提升在操作数上执行,并且结果具有提升类型。 如果升级类型是无符号类型,则表达式~E
等于该类型中表示的最大值减E
5逻辑否定运算符的结果!
如果其操作数的值不等于0,则其值为0;如果其操作数的值等于0,则值为1.结果的类型为int
。 表达式!E
相当于(0==E)
。
!
是一个布尔运算符,因此它会将数字转换为布尔值(任何非零值为true
,零总是为false
)。 那另一个!
颠倒布尔。
上一篇: Why does double negation force values to become a bool?
下一篇: Cause compilation error in C89 if two types are not the same