我知道要获得整数的前 j 个最低有效位,您可以执行以下操作:

  int res = (myInteger & ((1<<j)-1))

你能对最重要的位做类似的事情吗?

最佳答案

只需右移:(警告,当你想要 0 位时失败,但你的所有位都失败)

unsigned dropbits = CHAR_BIT*sizeof(int)-j;
//if you want the high bits moved to low bit position, use this:
ullong res = (ullong)myInteger >> dropbits;
//if you want the high bits in the origonal position, use this:
ullong res = (ullong)myInteger >> dropbits << dropbits;

重要的!强制转换必须是您的类型的未签名版本。

值得注意的是,当您要求所有(32?)位时,最低 j 位的代码失败。因此,双移会更容易:
unsigned dropbits = CHAR_BIT*sizeof(int)-j;
ullong res = (ullong)myInteger << dropbits >> dropbits;

看到它在这里工作:http://coliru.stacked-crooked.com/a/64eb843b3b255278 和这里:http://coliru.stacked-crooked.com/a/29bc40188d852dd3

关于c++ - 如何在 C++ 中获得整数的第 j 个最高有效位?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28685387/

10-11 08:31