如果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)。
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |