【发布时间】:2013-05-27 22:19:52
【问题描述】:
这里我想生成一个位模式来设置n 数字等于1 从位置p 开始。
数字从0 to 31 开始编号。
以下是我所做的。
int bitPattern(int n, int p) {
int hex, num1, num2;
hex = 0x80000000;
num1 = (hex >> (31 - p));
num2 = (hex >> (31 - (n+p)));
return num1 ^ num2;
}
例子:
bitPattern(6, 2) should return
..000011111100
任何具有较少运算符的替代解决方案?
【问题讨论】:
-
n+p > 31时您正在调用未定义的行为。如果保证永远不会出现这种情况,那么您仍然有实现定义的行为右移一个负数。但是如果你不怕UB,那((1 << n) - 1) << p呢? -
@DanielFischer 在我的问题
(n+p)不会超过 31。而且也很容易识别... -
无论如何,如果您只关心位,我建议使用无符号类型,然后
((1 << n) - 1) << p是安全的,除非n或p为负数或大于或等于类型的宽度。 -
@DanielFischer 谢谢...我会试试...
标签: c logic bit-manipulation