我有一个由四个 bytes
组成的数组,并希望将其转换为一个 int
。以下代码可实现此功能:
#include <stdio.h>
#include <stdint.h>
int main(void) {
uint8_t array[4] = {0xDE, 0xAD, 0xC0, 0xDE};
uint32_t myint;
myint = (uint32_t)(array[0]) << 24;
myint |= (uint32_t)(array[1]) << 16;
myint |= (uint32_t)(array[2]) << 8;
myint |= (uint32_t)(array[3]);
printf("0x%x\n",myint);
return 0;
}
结果如预期:
$./test
0xdeadc0de
现在我想用一行代码来实现这个,就像这样:
#include <stdio.h>
#include <stdint.h>
int main(void) {
uint8_t array[4] = {0xDE, 0xAD, 0xC0, 0xDE};
uint32_t myint = (uint32_t)(array[0]) << 24 || (uint32_t)(array[1]) << 16 || (uint32_t)(array[2]) << 8 || (uint32_t)(array[3]);
printf("0x%x\n",myint);
return 0;
}
但这会导致:
$./test
0x1
为什么我的程序会表现出这样的行为?