右移布尔值在C++

right shift bool in C++

本文关键字:C++ 布尔值 右移      更新时间:2023-10-16

在给定的代码中,布尔值已传递给foo,如mainFunc所示。我不确定e >> 24foo中这样做是否正确.我相信这只会给出垃圾价值。

void foo(bool e){
int a;
bool s;
e = e >> 24;
...
}
void mainFunc(){
int *arg = (int*)malloc(sizeof(int));
*arg = xxxx;   
foo(*(bool*)arg);
}

这是正确的做法吗?

编辑:我更关心操作e >> 24,因为e是布尔值。 这不会导致任何问题吗?对于任何误解,我们深表歉意。

我更关心e >> 24操作,因为ebool。 这不会导致任何问题吗?

内置算术运算符不对小于int的类型进行操作,有关详细信息,请参阅积分提升。在表达式中e = e >> 24;ebool的,为了向右移动,编译器首先将e的值提升到int,进行移位,然后将结果转换回bool。结果总是int0,它被转换为boolfalse。除非sizeof(int) <= 3,在这种情况下,将其移动24位或更多是未定义的行为。

强制转换为bool只是创建一个新的布尔值以传递给fooarg指向的四个字节中的任何一个都不会发生任何变化。它们保持不变。