gpt4 book ai didi

c++ - 在 bool 值上使用按位非运算符 (~) 是否会调用未定义的行为?

转载 作者:可可西里 更新时间:2023-11-01 15:54:52 31 4
gpt4 key购买 nike

如果 C++ 程序将按位非运算符 (~) 应用于 bool 值,是否会调用未定义行为?

例如下面的程序是否定义明确?

bool f = false;
bool f2 = ~f; // is f2 guaranteed to be true, or is this UB?
bool t = true;
bool t2 = ~t; // is t2 guaranteed to be false, or is this UB?

(是的,我知道有一个 ! 运算符更适合这类事情;出于这个问题的目的,我们将忽略它的存在;))

最佳答案

5.3.1/10 The operand of ~ shall have integral or unscoped enumeration type; the result is the one’s complement of its operand. Integral promotions are performed. [emphasis mine]

4.5/6 A prvalue of type bool can be converted to a prvalue of type int, with false becoming zero and true becoming one.

4.5/7 These conversions are called integral promotions.

所以 ~false 是一个 int,其位模式由全 1 组成 - 表示 0 的位模式的补码,即全零(根据 3.9.1/7。)类似地,~true 是一个 int,它是 1 的位表示的补码 - 即,所有具有最少有效位零。这两个值都将在 bool 上下文中评估为 true

关于c++ - 在 bool 值上使用按位非运算符 (~) 是否会调用未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29402367/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com