我需要对32位整数进行双向运算(确实represent chars,但无论如何)。
以下类型的代码是否安全?
uint32_t input;
input = ...;
if(input & 0x03000000) {
output = 0x40000000;
output |= (input & 0xFC000000) >> 2;
我的意思是,在“if”语句中,我在左侧是uint32_t,在右侧进行按位操作......我不知道!
那么您是否知道硬编码“0x03000000”的类型和大小(我的意思是它存储了多少字节)?
是否有可能某些系统将0x03000000视为一个int,因此仅对2个字节进行编码,这将是灾难性的?
答案 0 :(得分:1)
以下类型的代码是否安全?
是的,是的。
在那么您是否知道硬编码“0x03000000”的类型和大小(我的意思是它存储了多少字节)?
0x03000000
int
的系统上,32-bit
int
和long
的系统上的16-bit
为int
。< / p>
(由于uint32_t
在这里,我假设有两个补码和CHAR_BIT
8
。我也不知道任何系统16-bit
int
和64-bit
long
。)
是否有可能某些系统将0x03000000视为一个int,因此仅对2个字节进行编码,这将是灾难性的?
在16-bit
int
系统中见上文,0x03000000
是long
且32-bit
。 C中的十六进制常量是可以表示的第一种类型:
int
,unsigned int
,long
,unsigned long
,long long
,unsigned long long