我们如何才能在左边FF而不是00? 例如,我们有一个= E8,我们需要一个= 0xFFFFFFe8
0xFFE26C02 -> 0xFFE26C02
0x000000e8 -> 0xFFFFFFe8
0x100000e8 -> 0x100000e8
0x001000e8 -> 0xFF1000e8
P.S。数据类型int32或int64
答案 0 :(得分:2)
我想你的问题是如何将位留在最左边的'1'中?
这是我的解决方案:
我们取数字01001000(作为num)例如:
所以最后,(~num + 1)& num是为了获得数字中最右边的'1'。
要获得最左边的一个,请执行循环,条件为:
while(num-(~num+1)&num)
最后,您将获得数字01000000。
因此,将'0'定位到最左边的'1'是很容易的。
希望它会有所帮助。
答案 1 :(得分:2)
您可以使用以下内容将0
的所有前导字节转换为FF
int RevLeadingZeros(int number)
{
if((number & 0xFF000000)==0)
number |= 0xFF000000
else
return number;
if((number & 0x00FF0000)==0)
number |= 0x00FF0000
else
return number;
if((number & 0x0000FF00)==0)
number |= 0x0000FF00
else
return number;
if((number & 0x000000FF)==0)
number |= 0x000000FF
else
return number;
}
答案 2 :(得分:1)
如果没有直接计算,您可以迭代整数的每个字节,并将最后一个00
替换为FF
。
你也可以使用掩码OR
你的整数,这可以通过首次遍历整数记忆来轻松构建。