c++ - 为什么双重否定强制值变成 bool 值?

标签 c++ c

如果 x 是一个像 1010 这样的 4 位字,而你做了操作 !!x,

  • 第一个 !x 不会返回 0101,
  • 第二个 !(!x) 返回 1010?

而是返回 ...0001 或 ...0000。这是为什么?

最佳答案

在 C 中,!x 要么是 1 要么是 0,所以 !!x 是一个“折叠到 0 或 1 运算符”,因为任何非零值数字映射到 1,0 保持原样。这在某些情况下可能很有用。

在 C++ 中,!x 是一个 bool 类型,所以 !!x 是一个“折叠为假或真运算符”感觉任何非零数字都映射到 true,零映射到 false

关于c++ - 为什么双重否定强制值变成 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48672192/

相关文章:

c++ - 给定一个 DI-Graph。检查所有节点对是否存在来自 (u,v) 或 (v,u) 的路径

c++ - 如何让整数映射到 C++ 中的类定义?

c - Dev-C++ 文件处理

c++ - 我们如何使用强制转换来允许将字符屏蔽为字符串?

c++ - 在Windows IDE中编写C++代码并在Linux终端中编译的高效方法?

C++:如何从定义的容器对象中获取迭代器类型

c++ - 如何访问使用 omp_target_alloc() 分配的设备内存

c - 在嵌入式系统中寻找熵源?

c - 在 Windows 中构建 go 项目时运行 gcc 失败

c - 找到二进制数中最左边的一位