C++将多个整数存储在一个int变量中
C++ Store multiple integers in one int variable
我试图在一个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
- 包装一个对象并假装它是一个 int
- 无法一次从二进制文件中读取一个 int
- 当我输入一个字母时,cin 输入(输入是一个 int),而不是打印错误一次,它打印正确一次,然后在循环的其余部分打印 i
- 为什么我不能使用与"常量字符*"相同的"const int*"创建一个 int 数组?
- 如何将私有整数从A类传递到C 类B类的另一个INT变量
- C :用sizeof()operator在for for loop中增加一个int变量,只能工作一次
- 结构C++可以用 0 初始化,但不能用另一个 int 初始化
- 将一个int []转换为字符串,而无需明确的c 循环
- 如何通过另一个int变量递增int变量
- C++根据输入返回一个字符串或一个int
- 如何在另一个结构 arrya 中的一个结构中初始化一个 int 数组
- 两个 UShorts 之间的操作在 VC2015 中给出了一个 int
- turbo 如何在 C++ 的系统() 函数中放入一个 int varriable
- 无限输入C 计算器要结束计算,需要再进行一个INT
- 带有两个INT列表的结构将减少为一个INT
- 在c#中构建一个int数组,每个int调用c++或在c++中构建并传递给c#
- 对于具有 3 个无符号字符和一个 int 的结构来说,对于unordered_map来说,什么是好的哈希函数?
- 当我创建一个int指针并实例化一个数组时,数组在内存中发生了什么
- 如何在C 中的结构内设置一个int数组
- 为什么在我的测试程序中,从字符缓冲区读取一个int时,"std::copy"5x(!)比"