C++ C+中的右移布尔+;

C++ C+中的右移布尔+;,c++,integer-arithmetic,C++,Integer Arithmetic,在给定代码中,bool已传递到foo,如mainFunc所示。我不确定在foo中24是否正确。我相信这只会给出垃圾值 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>

在给定代码中,bool已传递到
foo
,如
mainFunc
所示。我不确定在
foo
中24是否正确。我相信这只会给出垃圾值

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。这不会导致任何问题吗?对于任何误解,我深表歉意。

bool
的转换只会创建一个新的布尔值传递给
foo
arg
指向的四个字节中的任何一个都不会发生任何变化。它们完全保持不变

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


内置算术运算符不会对小于
int
的类型进行操作,有关详细信息,请参阅。在表达式中
e=e>>24
e
bool
,要将其右移,编译器首先将
e
的值提升为
int
,进行移位,然后将结果转换回
bool
。结果总是
int
0
,它被转换为
bool
false
。除非
sizeof(int),否则我无法真正理解这个问题。其他3个字节的情况与第四个字节的情况相同——根本没有。当你将“三”转换为“三”时,“三”不会发生任何变化——它保持完全相同。如果
sizeof(bool)
为1,则没有“其他3个字节”0为false,所有其他值均为true。这不像在转换中只使用int的低8位……我不确定
e>>24
是否是一个有效的命令。既然e是bool。那么,请确认一下,标题隐含的问题,第一段隐含的问题,以及你的
mainFunc
隐含的问题,这些都不是你真正想问的问题?只需移除它们并问一个问题!