日常掉坑记录: 关于位操作

char a[8] = { 0x01, 0x02, 0x03, 0x04 };
int b = 0;
memcpy(&b, a, 4);
char c = (b>>8)&0xFF;
c是多少?
答案: 0x02
掉坑原因: 搞反了小端模式下>>符号的操作结果.
右移8位, 指的是变量所包含的字节整体由"高地址"向"低地址"移动,
小端模式下, 高地址在后, 因此b右移8位的结果是{0x02, 0x03, 0x04, 0x00}, 而不是{0x00, 0x01,0x02, 0x03}
即b=0x04030201变成b=0x00040302
 
posted @ 2025-09-28 20:15  CUCKOO0615  阅读(5)  评论(0)    收藏  举报