如何将整数分解为不同的变量?

时间:2018-10-01 01:11:43

标签: c++ binary hex

我正在尝试使程序的最终结果更进一步,并将其分为4个部分。该程序将十六进制数转换为二进制。我想将二进制数分成4个不同的部分。这些部分是2,7,3,4。例如将0100000110001001分解为01 | 0000011 | 000 | 1001。我将把每个部分分配给变量n1,n2,n3和n4。最终结果将是n1 = 01,n2 = 0000011,n3 = 000和n4 = 1001。最好的方法是什么?我目前正在使用c ++,但是如果更容易的话可以切换到其他东西。谢谢

2 个答案:

答案 0 :(得分:1)

您可以结合使用>>(右移运算符)和&(布尔和运算符)来完成此操作。

#include <iostream>
#include <bitset>

int main(){

  int i = 0b0100000110001001;
  int n4 = i & 0b1111; 
  std::cout << "n4 = " << std::bitset<4>(n4) << '\n';
  i = i >> 4;
  int n3 = i & 0b111; 
  std::cout << "n3 = " << std::bitset<3>(n3) << '\n';
  i = i >> 3;
  int n2 = i & 0b1111111; 
  std::cout << "n2 = " << std::bitset<7>(n2) << '\n';
  i = i >> 7;
  int n1 = i & 0b11; 
  std::cout << "n1 = " << std::bitset<2>(n1) << '\n';

}

输出:

n4 = 1001
n3 = 000
n2 = 0000011
n1 = 01

答案 1 :(得分:0)

好吧,您可以将二进制数字解析为字符串,然后使用子字符串获取4个数字部分。您可能会遇到左零的问题,这将由int变量来解决。 我用C#制作的。

class Program
{
    static void Main(string[] args)
    {
        string binaryNumber = "0100000110001001"; // your binary number to string
        int n1 = Convert.ToInt32(binaryNumber.Substring(0, 2));
        int n2 = Convert.ToInt32(binaryNumber.Substring(2, 7));
        int n3 = Convert.ToInt32(binaryNumber.Substring(9, 3));
        int n4 = Convert.ToInt32(binaryNumber.Substring(12, 4));

        string xn1 = n1.ToString().PadLeft(2, '0');
        string xn2 = n1.ToString().PadLeft(7, '0');
        string xn3 = n1.ToString().PadLeft(3, '0');
        string xn4 = n1.ToString().PadLeft(4, '0');

        Console.WriteLine("Numbers in INT variables (without left zeros)");
        Console.WriteLine($"1 Section (2):{n1}");
        Console.WriteLine($"2 Section (7):{n2}");
        Console.WriteLine($"3 Section (3):{n3}");
        Console.WriteLine($"4 Section (4):{n4}");

        Console.WriteLine("Numbers in STRING variables (with left zeros)");
        Console.WriteLine($"1 Section (2):{xn1}");
        Console.WriteLine($"2 Section (7):{xn2}");
        Console.WriteLine($"3 Section (3):{xn3}");
        Console.WriteLine($"4 Section (4):{xn4}");
        Console.ReadKey();
    }
}

希望有帮助!