为什么面膜完全没有转移到我的权利有人能解释一下吗?你可以代替那个1使用任何东西,结果是一样的。

unsigned mask = ~0 >> 1;
printf("%u\n", mask);
有帮助吗?

解决方案

这是一个类型的问题。如果你投0到无符号,它会被罚款:

unsigned mask = ~ (unsigned) 0 >> 1;
printf("%u\n", mask);

每注释编辑:或使用无符号的文字符号,这是更为简洁。 :)

unsigned mask = ~0u >> 1;
printf("%u\n", mask);

其他提示

符号扩展

发生了什么事是~0是将所有的位(-1)一个int。现在,你向右1移位;因为它是-1,符号扩展保持最高位设置成它仍然签署了(这是不是您所期望的)。然后它转换为无像你期望的那样。

尝试这种情况:

unsigned mask = (unsigned) ~0 >> 1;
printf("%08x\n", mask);

分配的RHS被视为一个符号量,除非你施放它,这意味着你看到没有铸造符号扩展。 (我也改变您的打印语句来显示十六进制的,这是我更容易对该数字进行解码。)

〜0是那些的字符串。 >>操作符对其进行移位,并在签署的价值,它改变的人进入高阶位。所以,你可以移动你想要的,结果也不会改变。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top