我想做的是制作一个掩码,该掩码从一系列位的最左侧具有1比特,其余为零,无论变量大小如何。我尝试了以下方法:
unsigned char x = ~(~0 >> 1);
我认为这应该适用于char或int类型,但事实并非如此!
对我来说,操作看起来像这样:
||||||||
0|||||||
|0000000
这是看起来应该的样子,并且使用16位整数:
|||||||| ||||||||
0||||||| ||||||||
|0000000 00000000
为什么这个结构体不起作用?无论我尝试将它分配给无符号字符还是整数,都会得到零值。
我现在才看了50页的K&R,所以我还是新手。我不知道什么是字面量,也不确定什么是“算术”移位,我不知道如何使用后缀,更不用说使用结构体了。
~(~(unsigned_type)0 >> 1)
。 - programmerjake1<<(8*sizeof(x)-1)
不是更加直观吗? - Jongware1<<(CHAR_BIT*sizeof(x)-1)
,以处理不使用8位比特的系统。 - Adam Rosenfield