任何人都可以帮助解释以下示例中val
代表的内容吗?我完全不知道val
的价值是什么。
#define SPLAT(p) (*(p) * (~0UL / 255))
uint8_t *page;
unsigned long val = SPLAT(page);
答案 0 :(得分:7)
假设long
是32位。 ~0UL是所有1的位模式,即0xffffffff。现在除以255或0xff给出0x01010101。
将此值乘以8位数,您将获得相同的字节4次;例如0x5a * 0x01010101 = 0x5a5a5a5a。
这与long的大小无关,long的所有字节都用原始字节填充。
例如,长度为8个字节:
#include <stdio.h>
int main() {
printf("%lu\n", sizeof(long));
printf("%lx\n", (~0UL / 255));
return 0;
}
作为输出:
8
101010101010101
答案 1 :(得分:0)
假设sizeof(unsigned long)
= 4,然后
~0UL = 0xffffffff, ~0UL / 255 = 0x01010101
假设*(p)= 0x5a,然后
0x5a * 0x01010101 = 0x5a5a5a5a