Hua*_*Jie -2 c bit-manipulation
任何人都可以帮助解释val以下示例中的含义吗?我完全不知道它的价值是什么val.
#define SPLAT(p) (*(p) * (~0UL / 255))
uint8_t *page;
unsigned long val = SPLAT(page);
Run Code Online (Sandbox Code Playgroud)
假设a 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;
}
Run Code Online (Sandbox Code Playgroud)
给出输出:
8
101010101010101
Run Code Online (Sandbox Code Playgroud)