【问题标题】:C++ Store multiple integers in one int variableC++ 将多个整数存储在一个 int 变量中
【发布时间】:2016-11-24 09:21:50
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 你没有错
  • 你为什么要在一个 int 中存储多个值?这是一些代码高尔夫练习还是你只是疯了?显然,在一个 int 中存储多个 int 值是不可能的,因为我不能将最大 int 值多次存储到一个 int 中。
  • @Toxxic 你需要这个有多通用? num1num2 真的会超过 9 吗?
  • 你确定你不是在寻找一个数组吗?
  • 您不要连接整数,因为没有“整数连接”之类的东西。您不添加文本,因为没有“文本添加”之类的东西。你不要把橙汁和水放在一个杯子里,因为它们不会像“橙汁和水”一样,它们会变成“稀释的橙汁”。只是...不要失去常识。

标签: c++ int


【解决方案1】:

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

对于您提供的示例:

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 的位数 - 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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以将它们转换为字符串,添加它们,然后将它们转换回来(作为第二个选项效率不高)

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

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

    int num3 = num1 * 10 + num2;
    

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

    【讨论】:

    • 当我看到你的出现时,我输入了完全相同的答案:)
    • 我不会为此使用std::pow。对于适合int 的任意数量的迭代,乘以十的 for 循环将快得多。同样允许任意长度会导致信息丢失。您将不知道从哪里拆分以再次将 num3 分开。
    • 您需要在此处添加任何内容(或类似内容)吗?因为我有以下错误:命名空间“std”没有成员“to_string”。此外,命名空间“std”没有成员“stoi”
    • @Toxxic 是的,&lt;string&gt;
    • @user4581301,这点速度值得牺牲代码的可读性,用一个循环代替一个有名的函数吗?可能不会,对于编写与该循环一样快的@​​987654327@ 也是如此。
    【解决方案3】:

    好吧,如果只是将数字相加并推到它们的预期位置呢?

    int num3 = num1 * 10 + num2;
    

    【讨论】:

      【解决方案4】:

      我想你想连接两个字符串文字。
      Convert the int to string 然后concatenate the two strings 这将为您提供来自字符串“2”和“6”的连接字符串“26” 如果您需要 int 26,那么您可以在串联后将 convert it back 转换为 int。 祝你好运:-)

      【讨论】:

      • 糟糕,我在输入答案后查找,已经有 3 个其他人了!
      • 有时会发生。
      • @RickD 在这种情况下我不会选择字符串操作,这看起来很愚蠢而且过于复杂。
      【解决方案5】:

      您必须将它们存储为字符串才能像这样连接它们:

      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
      

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

      【讨论】:

      • 复杂的方式。根本不需要任何字符串。
      • 嗯,字符串太复杂了,这就是为什么vector或pair要好得多
      • 好吧,把你的答案和我的比较一下?为什么你实际上需要所有花哨的 STL 东西?
      • SLT 好看吗?它实际上内置在 C++ 中
      • 第一个注意它是 STL,而不是 SLT 第二个注意 STL 不是 c++ 标准库,而是其他东西 第三个实际上是错误的只是做一个简单的数学运算而不是复杂的字符串构造操作不需要它们? 使用正确的工具解决简单的问题
      猜你喜欢
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多