【问题标题】:Steps to create certain bit masks?创建某些位掩码的步骤?
【发布时间】:2015-10-11 23:52:07
【问题描述】:

我正在寻找一种使用移位和按位运算符创建位掩码的通用方法,并注意左移溢出

例如。 0x80000000 类似于 (~0 >> 31)

更具体地说,0xAAAAAAA 和 0x55555555 是我正在努力解决的问题

【问题讨论】:

  • 首先,使用无符号整数时无需担心溢出。其次,这种移位只适用于连续的设置位。
  • 假设是 32 位(或更高)系统,0x80000000 == (1
  • @EOF 我正在使用已签名!
  • @Crowning:有这个神奇的构造:(unsigned)whateverintvariable.
  • @EOF 啊,谢谢!我不知道。但是,我不允许在我的作业中使用它,我很好奇如何去掩盖这种替代方式

标签: c bit-manipulation bitmask


【解决方案1】:
printf("0x%08x\n",  (~0 << 31));
unsigned int x;
x = (~0 << 31);
x >>= 31;
x |= x << 2;
x |= x << 4;
x |= x << 8;
x |= x << 16;
printf("0x%08X\n",  x);
x = (~0 << 31);
x >>= 30;
x |= x << 2;
x |= x << 4;
x |= x << 8;
x |= x << 16;
printf("0x%08X\n",  x);

http://ideone.com/N3Yx8Z

结果

0x80000000
0x55555555
0xAAAAAAAA

【讨论】:

  • x = (~0 &lt;&lt; 31); x &gt;&gt;= 31; 可以替换为x=1;x = (~0 &lt;&lt; 31); x &gt;&gt;= 30; 可以替换为x=2;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多