0

我需要对 32 位整数(确实代表 chars,但无论如何)进行逐位运算。

以下类型的代码安全吗?

uint32_t input;
input = ...;

if(input & 0x03000000) {
    output  = 0x40000000;
    output |= (input & 0xFC000000) >> 2;

我的意思是,在“if”语句中,我正在对左侧的 uint32_t 和右侧进行按位运算……我不知道!

那么你知道硬编码的“0x03000000”的类型和大小(我的意思是它存储了多少字节)吗?

是否有可能某些系统将 0x03000000 视为 int 并因此仅在 2 个字节上对其进行编码,这将是灾难性的吗?

4

1 回答 1

1

以下类型的代码安全吗?

是的。

那么你知道硬编码的“0x03000000”的类型和大小(我的意思是它存储了多少字节)吗?

0x03000000int一个系统上32-bit intlong在一个系统上16-bit int.

(正如uint32_t这里所介绍的那样,我假设 和 的补码CHAR_BIT8而且我不知道任何带有16-bit int和的系统64-bit long。)

是否有可能某些系统将 0x03000000 视为 int 并因此仅在 2 个字节上对其进行编码,这将是灾难性的吗?

参见上面的16-bit int系统,0x03000000is along和 is 32-bit。C 中的十六进制常量是第一种可以表示的类型: int, unsigned int, long, unsigned long, long long,unsigned long long

于 2013-06-29T11:29:56.473 回答