C/ c++中的bool值求和
Summing bool values in C/C++
考虑下面的c++代码:
bool a = 5;
bool b = 6;
int c = (int)a + (int)b;
当我编译运行这段代码时,c的值是2。标准是否保证,在任何编译器/平台中,初始化为false(0)或true(不一定是1)的bool值将在操作中为1,并且上面的代码将始终导致c为2?
在C99中,包括stdbook .h,这仍然有效吗?
c++标准第4.7节(整数版本)规定:
如果源类型为bool,则将值false转换为0,值true被转换为1。
第4.9节对浮点数转换做了相同的保证。
对于编译器来说,规则通常是false为0,其他都为真。然而,像对待整数类型一样对待bool通常被认为是不好的形式。然而,标准包括一个转换为int的规则,只要编译器遵守标准,你的假设是正确的false = 0和true = 1 !
在任何情况下,为什么算术与bool类型?
希望对您有所帮助
按标准:
-
true
转换为1 -
false
转换为0
转换为int
是不需要的,因为转换为int
是隐式的。
David Schwartz已经回答了c++的问题。对于C99标准,我们有6.3.1.4:
当将任何标量值转换为_Bool时,如果值比较等于0;否则,结果为1。
相关文章:
- 写入向量<向量<bool>>
- 让bool方法返回其他整数
- 求和 int 乘以双倍时的欠/过近似
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- Arduino-C++ bool 不会从 false 变为 true
- 递归求和任务的错误答案
- 向量值(字符串和整数)求和C++
- 为什么在这种情况下,bool 类型的输出等于 0?
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- 错误:不能使用"显式"说明符声明 bool'
- 为什么 C++ 11 在 ios 类中添加了运算符 bool
- 从标准::字符串到标准::矢量<bool>的快速转换
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 通过 mpi 发送 c++ 标准::矢量<bool>
- 为什么使用Pool和Bool而不是int8_t或char
- 通过 RCPP 中的索引求和
- 矩阵行求和与 RowMajor 和 ColMajor 数据排列的奇怪性能差异
- 如何为地图< map<int,int> 、bool > 分配值?
- C/ c++中的bool值求和