C++ 数字左边的加法

C++ 数字左边的加法,c++,c,C++,C,我们怎样才能在左侧FF而不是00处进行加法? 例如,我们有a=E8,我们需要a=0xFFFFFFe8 0xFFE26C02 -> 0xFFE26C02 0x000000e8 -> 0xFFFFFFe8 0x100000e8 -> 0x100000e8 0x001000e8 -> 0xFF1000e8 p.S.数据类型int32或int64无需直接计算,只需迭代整数的每个字节,并用FF替换最后一个连续的00 您还可以或使用掩码创建整数,该掩码可以通过第一次遍历整数

我们怎样才能在左侧FF而不是00处进行加法? 例如,我们有a=E8,我们需要a=0xFFFFFFe8

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

p.S.数据类型int32或int64

无需直接计算,只需迭代整数的每个字节,并用
FF
替换最后一个连续的
00


您还可以
使用掩码创建整数,该掩码可以通过第一次遍历整数内存轻松构建。

无需直接计算,您只需迭代整数的每个字节,并将最后一个连续的
00
替换为
FF


您还可以
使用掩码创建整数,该掩码可以通过第一次遍历整数内存轻松创建。

我想您的问题是如何将位放在数字中最左边的“1”上

以下是我的解决方案:

让我们以数字01000(作为num)为例:

  • 首先,执行~num,得到10111
  • 然后加1,(~num+1)的答案是10111000
  • 做(~num+1)&(num),你会得到000011000
  • 最后,(~num+1)&num的结果是得到num中最右边的“1”

    要获取最左边的一个,请执行循环,条件为:

    while(num-(~num+1)&num)
    
    最后,你会得到01000000这个数字

    因此,将“0”定位到最左边的“1”很容易


    希望能有所帮助。

    我想你的问题是如何将位放在数字中最左边的“1”上

    以下是我的解决方案:

    让我们以数字01000(作为num)为例:

  • 首先,执行~num,得到10111
  • 然后加1,(~num+1)的答案是10111000
  • 做(~num+1)&(num),你会得到000011000
  • 最后,(~num+1)&num的结果是得到num中最右边的“1”

    要获取最左边的一个,请执行循环,条件为:

    while(num-(~num+1)&num)
    
    最后,你会得到01000000这个数字

    因此,将“0”定位到最左边的“1”很容易


    希望有帮助。

    您可以使用以下命令将
    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;
    }
    

    您可以使用以下命令将
    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;
    }
    

    这些计算在我看来不一致。哪个数据结构?整数还是字符串?@LightnessRacesinOrbit矛盾在哪里?我不see@Qwerty:在最左边的字节中有
    0x10
    ->
    0x10
    ,但
    0x00
    ->
    0xFF
    。然后,在第二个示例中,前三个字节全部采用
    0xFF
    。这只是我的问题,还是毫无意义?你的意思是“将前导的00变为FF,直到到达一个非'00'字节?”这些计算在我看来并不一致。哪个数据结构?整数还是字符串?@LightnessRacesinOrbit矛盾在哪里?我不see@Qwerty:在最左边的字节中有
    0x10
    ->
    0x10
    ,但
    0x00
    ->
    0xFF
    。然后,在第二个示例中,前三个字节全部采用
    0xFF
    。仅仅是我,还是没有意义?你的意思是“把前导的00变成FF,直到你碰到一个非'00'字节?”