XIA*_*TAO 2 c++ boolean bit-manipulation
我对一个问题bitwise not,并logical not和希望有人能回答这个问题对我来说.
所以我知道以下工作:
!true == false
!false == true
Run Code Online (Sandbox Code Playgroud)
我认为bitwise not可以做同样的事情,但显然不能.
假设我有一个布尔值:
bool test = true;
Run Code Online (Sandbox Code Playgroud)
然后当我打印出来时~test,输出是true.
如果布尔值是
bool test = false;
Run Code Online (Sandbox Code Playgroud)
然后当我打印输出时~test,输出true是预期的.但是,当我再做一次~test时,它不会再回来了false.
由于某种原因,bitwise not无法将布尔值从中翻转true到false.
有没有人有这个答案?
根据C++标准([expr.unary.op])的§5.3.1.10,~运算符采用整数(或无范围的枚举类型)操作数并执行整数提升,其中~操作的结果类型是其类型提升的操作数.这意味着首先将布尔值转换为整数(0for false和1for true).由于您的上下文,~操作的结果然后被转换回布尔值:falsefor 0和true所有非零值.
如果你有一个布尔值x,你可以想到~xas ~static_cast<int>(x)和x = ~xas x = ((~static_cast<int>(x)) != 0).
因此:
bool a = false;
bool b = ~a; // b = (~static_cast<int>(a) != 0)
// b = (~static_cast<int>(false) != 0)
// b = (~0 != 0)
// b = (0xffffffff != 0)
// b = true
bool c = ~b; // c = (~static_cast<int>(b) != 0)
// c = (~static_cast<int>(true) != 0)
// c = (~1 != 0)
// c = (0xfffffffe != 0)
// c = true
Run Code Online (Sandbox Code Playgroud)