java - **i= 0 then x[i]= even, i =1 then [i]= odd** 从汇编转换为 Java 编程
问题描述
这是来自评估练习的问题,如下所示。尽管我从网上找到并总结了答案,但我仍然不知道它在 Java 编程中是如何工作的,这可以帮助新学习者理解逻辑,因此我更有可能将其转换为 Sigma 16 中的汇编语言系统。
问:Sigma16 系统在内存中有一个 16 位带符号数的数组 X 。编写一个汇编语言程序来编写第二个数组 Y,如果 X 的第 i 个元素是偶数,则它的第 i 个元素为 0,如果它是奇数,则为 1。
答:
ADD R1, R0, R0 ; i = 0
LEA R2, 4[R0] ; R2 = 4
LEA R3, 1[R0] ; R3 = 1
LEA R4, 2[R0] ; R4 = 2
Loop LOAD R5, X[R1] ; R5 = x[i]
DIV R6, R5, R4 ; x[i] / 2
STORE R15, Y[R1] ; y[i] = x[i] mod 2
ADD R1, R1, R3 ; i++
CMPLT R15, R1, R2 ; If i< 4 then⋯
JUMPT R15, Loop[R0] ; Loop
TRAP R0,R0,R0
非常感谢您的回答。如果上面的代码有错误,也请更正。
解决方案
Java 中的16 位有符号整数是short
s,因此 Java 中的等效代码片段可能是:
short[]x = new short[]{32, 203, 98, 19, 47, 78};
short[]y = new short[x.length];
for (int i = 0; i < x.length; ++x)
if (x[i] % 2 == 0) // % is the remainder operator
y[i] = 0;
else
y[i] = 1;
您也可以在一行中进行奇偶测试
y[i] = (x[i] % 2 == 0) ? 0 : 1;
除了“除以 2 后的余数”测试之外,还可以选择更类似于汇编的按位运算:
y[i] = x[i] & 1;
推荐阅读
- node.js - Node.js 出站 IP - 更改地址
- visual-studio-code - 工作区中每个项目的不同颜色
- javascript - 如何在浏览器中使用模块,同时也可以从 DevTools 中引用变量和函数?
- c# - 如何只重绘特殊区域?
- c# - 想要在 Windows 应用程序中将自定义的 Datetimepicker 显示为“仅月份和年份”(使用 C#)
- linux - 导出多个 LD_LIBRARY_PATH 的正确方法
- linux - 用适当数量的“*”替换偶数词
- php - 为什么我不能在我的组合主键中插入新值?
- javascript - 与 html 文件位于同一目录中的外部 javascript 不起作用
- karate - ./gradlew 测试失败,出现 netty WebSocketException