C++中的右移bool
right shift bool in C++
在给定的代码中,布尔值已传递给 foo
,如 mainFunc
所示。我不确定 e >> 24
在 foo
中是否正确。我相信这只会给出垃圾值。
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 是布尔值。这不会导致任何问题吗?对任何误解表示歉意。
转换为 bool
只是创建一个新的布尔值传递给 foo
。 arg
指向的四个字节中的任何一个都没有发生任何变化。它们完全相同。
I was more concerned about operation e >> 24
, since e
is bool
. won't this lead to any issue?
内置算术运算符不对小于 int
的类型进行运算,有关详细信息,请参阅 integral promotion。在表达式 e = e >> 24;
e
中是 bool
并且要将其右移,编译器首先将 e
的值提升为 int
,进行移位然后转换结果回到 bool
。结果总是 int
0
,它被转换为 bool
false
。除非 sizeof(int) <= 3
,在这种情况下将其移动 24 位或更多位是未定义的行为。
在给定的代码中,布尔值已传递给 foo
,如 mainFunc
所示。我不确定 e >> 24
在 foo
中是否正确。我相信这只会给出垃圾值。
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 是布尔值。这不会导致任何问题吗?对任何误解表示歉意。
转换为 bool
只是创建一个新的布尔值传递给 foo
。 arg
指向的四个字节中的任何一个都没有发生任何变化。它们完全相同。
I was more concerned about operation
e >> 24
, sincee
isbool
. won't this lead to any issue?
内置算术运算符不对小于 int
的类型进行运算,有关详细信息,请参阅 integral promotion。在表达式 e = e >> 24;
e
中是 bool
并且要将其右移,编译器首先将 e
的值提升为 int
,进行移位然后转换结果回到 bool
。结果总是 int
0
,它被转换为 bool
false
。除非 sizeof(int) <= 3
,在这种情况下将其移动 24 位或更多位是未定义的行为。