在数字的左边添加

时间:2013-12-12 10:58:32

标签: c++ c

我们如何才能在左边FF而不是00? 例如,我们有一个= E8,我们需要一个= 0xFFFFFFe8

 0xFFE26C02 -> 0xFFE26C02
 0x000000e8 -> 0xFFFFFFe8
 0x100000e8 -> 0x100000e8
 0x001000e8 -> 0xFF1000e8

P.S。数据类型int32或int64

3 个答案:

答案 0 :(得分:2)

我想你的问题是如何将位留在最左边的'1'中?

这是我的解决方案:

我们取数字01001000(作为num)例如:

  1. 首先,做~num,你得到10110111.
  2. 然后加1,(~num + 1)的答案是10111000。
  3. 做(~num + 1)& (num),你得到00001000。
  4. 所以最后,(~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你的整数,这可以通过首次遍历整数记忆来轻松构建。