结果是什么:
int x = 0x00000001; int y = 0x80000000;
在大端系统?
我的目标是定义一个具有第一个(内存中)位集的int,无论它是最重要的还是最不重要的 . 我知道,对于little-endian系统,x会满足这个要求,但在大端系统中它仍然是正确的吗?
我很确定以下内容适用于两个系统:
char c[4] = {0x80, 0, 0, 0}; int x = (int) c;
那是对的吗?有更优雅的方法吗?
(我没有大端系统可以试验)
你可能想要的是这个:
int x = 0; char* p = (char*)&x; p[0] = 0x01;
上面的代码将 int 变量的最低地址字节中的最低有效位设置为1:
int
在Big-Endian处理器上,它将MS字节中的LS位设置为1(即 x == 0x10000000 ) .
x == 0x10000000
在Little-Endian处理器上,它将LS字节中的LS位设置为1(即 x == 0x00000001 ) .
x == 0x00000001
话虽如此,你对"the first bit"的定义是什么?恕我直言,这是最不重要的一个,在这种情况下, int x = 0x00000001 是答案,无论处理器的Endianness如何!
int x = 0x00000001
以下术语可能有助于您更好地理解:
将最低有效位设置为8位字节:0x01
设置8位字节中的最高有效位:0x80
将最低有效字节设置为4字节整数:0x000000FF
设置4字节整数中的最高有效字节:0xFF000000
在LE处理器上设置4字节整数的最低地址字节:0x000000FF
在BE处理器上设置4字节整数的最低地址字节:0xFF000000
在LE处理器上设置4字节整数的最高地址字节:0xFF000000
在BE处理器上设置4字节整数的最高地址字节:0x000000FF
你可以试试工会
union foo { char array[8]; int64_t num; };
2 回答
你可能想要的是这个:
上面的代码将
int
变量的最低地址字节中的最低有效位设置为1:在Big-Endian处理器上,它将MS字节中的LS位设置为1(即
x == 0x10000000
) .在Little-Endian处理器上,它将LS字节中的LS位设置为1(即
x == 0x00000001
) .话虽如此,你对"the first bit"的定义是什么?恕我直言,这是最不重要的一个,在这种情况下,
int x = 0x00000001
是答案,无论处理器的Endianness如何!以下术语可能有助于您更好地理解:
将最低有效位设置为8位字节:0x01
设置8位字节中的最高有效位:0x80
将最低有效字节设置为4字节整数:0x000000FF
设置4字节整数中的最高有效字节:0xFF000000
在LE处理器上设置4字节整数的最低地址字节:0x000000FF
在BE处理器上设置4字节整数的最低地址字节:0xFF000000
在LE处理器上设置4字节整数的最高地址字节:0xFF000000
在BE处理器上设置4字节整数的最高地址字节:0x000000FF
你可以试试工会