【发布时间】:2014-09-20 12:55:57
【问题描述】:
我有一个程序,它接收一个汇编代码文本文件并对其进行解析并将每一行更改为二进制代码。每行都是一个单独的 16 位二进制代码(值存储为 UInt 16),然后我将其放入数组中。代码是(以整数表示):
32768 //
65285 //
64514 //
65280 //
64512 //
65281 //
64513 //
36352 //
65025 //
63488 //
58899 //
38400 //
65024 //
64257 //
64512 //
65026 //
64258 //
61952 //
59911 //
42496 //
65026
现在每个代码的分解方式是 7 位(指令)、1 位(立即数)、8 位(值)。我现在正在尝试解析二进制代码的这 3 个单独的部分。为此,我编写了以下内容:
public void doInstruction()
{
foreach(var op in IPE.opCodes)
{
Console.WriteLine("this is the original op code: " + op);
var instr = (op >> 0) & 127;
Console.WriteLine(instr + " THIS IS THE INSTRUCTION BINARY");
}
}
例如,第一个代码 (32768 = 1000000000000000)。我使用上面的代码将其与 32768 的二进制代码与 127 的二进制代码进行比较,在我看来应该产生 1000000(输出中应该出现 64)。但是在我运行我的代码之后。我的输出是:
this is the original op code: 32768
0 THIS IS THE INSTRUCTION BINARY
什么时候输出应该是:
this is the original op code: 32768
64 THIS IS THE INSTRUCTION BINARY
我在这里错过了什么/做错了什么?任何帮助表示赞赏。
【问题讨论】:
标签: c# binary comparison bit-shift bits