【问题标题】:Binary Concatenation not Working二进制连接不起作用
【发布时间】:2014-10-07 03:25:28
【问题描述】:

我目前正在使用 C 语言开发一个项目,当我尝试连接一些二进制数时遇到了一些问题。

uint64_t IMM = vmicxtFetch4Byte(processor, thisPC+2);
uint64_t shiftedInstr = ((uint64_t) instr16) << 32;
uint64_t instr48 = IMM | shiftedInstr;

printf("Instr16: %x IMM: %lx Instr64: %lx\n", instr16, (unsigned long) IMM, (unsigned long) instr48);

现在我得到的即时值 (IMM) 和初始指令 (instr16) 的输出是正确的,但 OR 的结果似乎并没有给我想要的结果。我预计 068200000040 但我得到了

Instr16:682 IMM:40 Instr64:40

我已经做了很多这种二进制数学,但由于某种原因,这让我很困惑。任何想法将不胜感激!

【问题讨论】:

    标签: c math binary


    【解决方案1】:

    这是输出问题,而不是计算问题。您将 instr48 的转换值转换为 unsigned long,这在您的系统上似乎是 32 位类型。 instr48 的最重要部分被“切掉”,因此您得到的值仅包含最不重要的部分。

    您应该将其转换为 unsigned long long,并使用 %llu 格式说明符。

    【讨论】:

      【解决方案2】:

      instr48获取“068200000040”代码需要

      1. 打印说明符中的前导 0
      2. 打印宽度为 12。
      3. #include &lt;inttypes.h&gt; 中找到uint64_t 的匹配说明符序列

        #include <inttypes.h>
        printf("Instr64: %012" PRIx64 "\n", instr48);
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-17
        • 2015-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多