我\xe2\x80\x99见过低级按位表达式,用于~0生成所有s的位模式1,然后将其用作掩码等。例如在K&R第45页上:
/* 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}\nRun Code Online (Sandbox Code Playgroud)\n在我的机器上,(unsigned long) ~0计算结果为0x FF FF FF FF FF FF FF FF. 这让我们可以轻松生成1大于ints 的蒙版,这很好。
但是,\xe2\x80\x99t 应该(unsigned long) ~0评估为 吗0x 00 00 00 00 FF FF FF FF?没有任何后缀,0被视为整数常量,因此~0计算结果为0x FF FF FF FF. 为什么 …