【问题标题】:C++ Integer ConcatenationC++ 整数连接
【发布时间】:2012-01-31 18:42:16
【问题描述】:

我在 C++ 中有一个整数和三个变量。我想将它的第一个二进制数字放入第一个变量中,第二个放入第二个变量中,其余放入第三个变量中。

知道怎么做吗?

【问题讨论】:

  • “第一个二进制数字”不明确。你的意思是最不重要还是最重要?
  • 32 位无符号整数 x 的最高有效位类似于:msb = (1
  • 谢谢,那么如何获得第二重要位?
  • (我在 cmets 中编码失败...)
  • @Tring 嗯...不知道...也许使用 30 而不是 31

标签: c++ binary concatenation


【解决方案1】:

假设 32 位整数:

unsigned int val = ...;
unsigned int a, b, c;

a = val & (1U << 31); // = 10000000 00000000 00000000 00000000
b = val & (1U << 30); // = 01000000 00000000 00000000 00000000
c = val & 0x3fffffff; // = 00111111 11111111 11111111 11111111

【讨论】:

    【解决方案2】:

    这对我来说实际上有点像编码作业。不管你想要什么数字,基本的想法是将此变量除以 1、10、100 等并将结果保持为整数,然后通过将其进一步除以 10 来获得余数。示例:578/10 -> 57.8 -> 57 -> 57%10 -> 7.

    编码只是DIY。

    【讨论】:

    • Mod / div 不是这样做的方法。对于 2 的幂,您需要 and 和 shift。对于单个位,您要屏蔽。
    • 哦,二进制数字...对不起,我的第一篇文章大错特错..XD
    • 任何称职的编译器都知道如何处理除以 2 的除法和模数。无需手动优化它。选择一种方式而不是另一种方式的唯一原因是可读性。
    • 如果你真的对位感兴趣,最好通过位操作来处理位域。除法和 mod 用于算术。更不用说,除以 2 得到的是 LSB 而不是 MSB。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2020-08-29
    • 2016-09-28
    • 2012-09-23
    • 2019-01-22
    • 2012-12-28
    • 1970-01-01
    相关资源
    最近更新 更多