天哪.
有人可以解释这两个字节反转函数实现的逻辑差异.
例1:
uint32_t byte_reverse_32(uint32_t num) {
static union bytes {
uint8_t b[4];
uint32_t n;
} bytes;
bytes.n = num;
uint32_t ret = 0;
ret |= bytes.b[0] << 24;
ret |= bytes.b[1] << 16;
ret |= bytes.b[2] << 8;
ret |= bytes.b[3];
return ret;
}
Run Code Online (Sandbox Code Playgroud)
例2:
uint32_t byte_reverse_32(uint32_t num) {
static union bytes {
uint8_t b[4];
uint32_t n;
} bytes;
bytes.n = num;
uint32_t ret = 0;
ret |= (bytes.b[0] << 24) || (bytes.b[1] << 16) || (bytes.b[2] << 8) || (bytes.b[3]);
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我必须遗漏一些东西,因为对于无符号整数0xFE12ADCF,第一个例子正确给出,0xCFAD12FE而第二个例子产生1.我错过了什么?
顺便说一句,我无法弄清楚如何在pre + code-tags中获得'<<' LSHIFT.如果可以这样做,请随时编辑(并评论如何=)).
谢谢.
编辑:修复了bytes从未分配过的-variable.