为什么双重否定力值成为布尔?
如果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
