C++将多个整数存储在一个int变量中

C++ Store multiple integers in one int variable

本文关键字:一个 int 变量 整数 存储 C++      更新时间:2023-10-16

我试图在一个int变量中存储多个整数。就像这样:

int num1 = 2;
int num2 = 6;
int num3 = num1 + num2;

但我得了8分。我想要26。我知道这是我应该期待的结果,但我只想找到一种将整数联系在一起的方法,而不是将它们相加,我想不出更好的例子了。

谢谢!

您可以将它们转换为字符串,添加它们,然后将它们转换回

int num3 = std::stoi(std::to_string(num1) + std::to_string(num2));

或者更"数学"的方式(只有当num2只是一个数字时才有效)

int num3 = num1 * 10 + num2;

请注意,第一个解决方案适用于任何数字,这也意味着如果不存储数字的长度,就无法取回原始数字

我认为您需要将这两个字符串文字连接起来
将int转换为字符串,然后连接这两个字符串这将为您提供字符串"2"answers"6"中的串联字符串"26"如果您需要int 26,那么您可以在连接之后将其转换回int。祝你好运:-)

好吧,把相乘后的数字相加并推到它们想要的位置怎么样?

int num3 = num1 * 10 + num2;

您可以使用逐位运算将多个整数存储为一个整数。

对于您提供的示例:

int num1 = 2; // 0010
int num2 = 6; // 0110

然后,您可以使用4位连接数字:

int num3 = (2 << 4) | 6; // 00100110 num3 = 38

或者,如果您使用3位,则它变为:

int num3 = (2 << 3) | 6; //010110 num3 = 22

要检索回数字,您必须在num3上进行右移以获得num1,并与2进行逐位and运算,该运算是位数-1(2 ^ n - 1, where n = number of bits)的幂。

对于4个比特,num3=38;

num1 = num3 >> 4; // 2
num2 = num3 & (2 * 2 * 2 * 2 - 1); // 6

对于3位,num3=22:

num1 = num3 >> 3; // 2
num2 = num3 & (2 * 2 * 2 * 2 - 1); // 6

希望这能有所帮助。

稍晚,但:

您可以将这两个整数组成一个字符串,然后将其转换回字符串。

这是我更简单但更大的代码:

int foo = 2;
int bar = 6;
string temp = to_string(foo) + to_string(bar);
int foobar = stoi(temp);
cout << foobar;

这是我较小的一个:

int foo = 6;
int bar = 2;
int foobar = stoi(string(to_string(foo)) + string(to_string(bar)));
cout << foobar;

也许不如其他例子有效,但如果有两位数,它也有效。

这似乎是一个老问题,我偶然发现我也想拥有这种能力。

因为还没有人提到这一点,如果你有一个阈值来验证数字是否低于该范围上限,你可以通过单独存储两个数字的位来将它们存储在一个数字类型中。

您可以存储第一个数字,将比特设置为小端序,对于第二个数字,您可以将比特存储为大端序。

然后,你可以将其抽象为只使用字节作为大小,字节的长度取决于你的拱门,通常1个字节是8位,这意味着使用uint16(2个字节),我们可以将每个数字限制在一半的空间内,因为存储的每个数字都需要uint8。

如果我们存储在uint8中,那么这两个数字应该分别在4位内表示。

这对小数字很有用,因为有明显的限制。。

// Examples
// uint8 - store first number - little endian
[0][0][0][0] [1][1][1][1] = 15 // storing in 4 bits the max value
// uint8 adding value of 3 as second value in big endian
[1][1][0][0] [1][1][1][1]
// uint16 store first number - little endian
[0][0][0][0][0][0][0][0] [1][1][1][1][1][1][1][1] = 255 // storing in 8 bits the max value

因此,如果存储在4位中,则最大值为15;如果存储在8位中,那么最大值为255,任何存储在该值以上的值都会溢出并损坏其他存储的值。


显然,当您不需要进一步的分区时,将它们视为小端序和大端序只适用于两个数字,因为这在考虑如何存储它们时会有所帮助。而且可能有一些库可以自动在端序表示之间提供帮助。

但是你可以按照你想要的比特片来划分字节——只是如果不使用endianness,你可能需要手动进行更多的转换。

分区也是intotito的答案,但很少有答案指出你需要一个价值观的上限阈值,否则这只是一把上膛的手枪。

您必须将它们存储为字符串,以便像这样连接它们:

string str_num1 = to_string(num1);
string str_num2 = to_string(num2);
string result = num1 + num2;

不过,这是一种糟糕的方法,因为如果你使用任何不是1位数的数字,它将变得太复杂,无法存储和/或提取数据。

使用矢量或对。更简单、更少麻烦:

pair<int, int> presult = make_pair(num1, num2);  ///or
vector<int> vresult;
vresult.push_back(num1);
vresult.push_back(num2);  ///num1 in spot 0, num2 in spot 1

向量应该是最好的,因为它可以容纳任意大量的int

相关文章: