【发布时间】:2013-12-17 08:53:48
【问题描述】:
我有一个无符号的 16 位数字 a,我需要获取 ~a 的值。简单地取 ~a 的值是行不通的(对于 a=10,我需要 ~a=5,而不是 ~a=7FF5)。 我能想到的最好的方法是:
int negate(int a)
{
int mask1 = 0x4000;
int mask2 = 0x7FFF;
for (int i=0;i<15;i++)
{
if (!(a&mask1))
{
mask1>>=1;
mask2>>=1;
}
else
break;
}
int t = (0x7FFF - ~a) & mask2;
return t;
}
这样做的问题是它太慢了;您知道获得所需结果的更快方法吗?
感谢您的帮助
【问题讨论】:
-
所以只计算有效位?
-
对于
a=5,您会想要2吗? -
是什么让你认为 ~10 应该是 5?
-
~5 肯定不是 10,除非你说的是小食。但是 10 必须等于 ~~10。因此,~10 不可能是 5。那么......这些数字是什么,肯定不是
int? -
求输入的 2 的下一个幂,然后与该值减去 1 进行异或?
标签: c++ c optimization bit-manipulation