小编Her*_*mit的帖子

C - 将 ~0 转换为 unsigned long

我\xe2\x80\x99见过低级按位表达式,用于~0生成所有s的位模式1,然后将其用作掩码等。例如在K&R第45页上:

\n
/* getbits: get n bits from position p */\nunsigned getbits(unsigned x, int p, int n)\n{\n    return (x >> (p+1-n)) & ~(~0 << n);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

在我的机器上,(unsigned long) ~0计算结果为0x FF FF FF FF FF FF FF FF. 这让我们可以轻松生成1大于ints 的蒙版,这很好。

\n

但是,\xe2\x80\x99t 应该(unsigned long) ~0评估为 吗0x 00 00 00 00 FF FF FF FF?没有任何后缀,0被视为整数常量,因此~0计算结果为0x FF FF FF FF. 为什么 …

c casting type-conversion

8
推荐指数
1
解决办法
387
查看次数

标签 统计

c ×1

casting ×1

type-conversion ×1