C++ C+中的右移布尔+;
在给定代码中,bool已传递到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>
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
隐含的问题,这些都不是你真正想问的问题?只需移除它们并问一个问题!