布尔变量的位不
Bitwise NOT with boolean variable
我是使用位操作符和bool类型的初学者。我可能错了,但我认为bool类型以1位表示,可以从{0,1}获取值。所以,我用这样一个变量尝试了NOT(~)运算符,结果对我来说很奇怪。如。
bool x = 0;
cout << (~x);
得到-1。你能告诉我哪里错了吗?为什么只有……操作符反转值(从0到1和从1到0)?
大多数处理器没有1位宽的通用寄存器,所以当你使用布尔值时,它会占用该平台上的默认寄存器大小(即目前大多数英特尔和ARM计算机上的64位,但在某些嵌入式系统上可能是32位)。当你取一个全为0的数为负时,你得到的都是1。在二进制补码中,该值在有符号十进制中为-1。长话短说,你的bool实际上是一个int, ~0是-1
!
运算符是一个逻辑运算符,因此0 (false)被反为1 (true)。
~
运算符是位运算符,因此每个位都是负的。一个bool
,虽然理论上是一个位元,但可以产生int
型的表达式。因此,您实际上是否定0.....000
,这是1...111
,这是-1(见2的补)。
bool
值x
在表达式~x
中使用时隐式转换为int
。绝大多数计算机使用二进制补码表示有符号整数,其中~0
等于-1。
!
运算符被定义为!x
的类型是bool
而不是int
,所以这个问题不会发生。
相关文章:
- 变量定义到C++布尔值转换
- 如何在 c++ 中让布尔变量返回为 0 或 1 而不是真或假?
- 将布尔变量添加到 int
- 如何使布尔变量仅在设置为 true 时才为真?
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 创建类似于布尔值的变量类型
- C++中未初始化成员布尔变量的默认值是多少?
- 我可以在C++中延迟布尔变量的求值吗
- 互锁变量访问(在布尔值上)和 std::atomic_flag 之间的区别
- 全局销毁期间全局布尔变量可靠吗?
- 使用动态布尔变量实例化模板
- 如何检查布尔变量是否为真
- C++ 动态评估变量类型布尔值
- 尝试将字符串变量转换为布尔值会导致 "true" 和 "false" 都等于 0
- do while 循环忽略我的布尔标志变量 C++
- 布尔变量 if 语句 C++ 上的分段错误
- 为什么我的布尔变量会更改(C )
- 允许使用布尔变量和值的功能
- 非标准语法;使用"&"创建指向成员的指针。访问布尔变量
- 监视全局变量/布尔表达式的更改