减法和除法运算的十六进制计算器问题

Posted

技术标签:

【中文标题】减法和除法运算的十六进制计算器问题【英文标题】:hexadecimal calculator issue with subtraction and division operation 【发布时间】:2022-01-11 18:26:47 【问题描述】:

我有一个应用基础计算器,但我遇到了两个基础十六进制之间的减法问题。如果一个(大数减去一个小数)它给出了正确的结果。 问题是当操作(小数减大数)例如:(1 - 22 或 1a - 22)应用程序崩溃并关闭。

十六进制的方法是:

private void hexa_calc() 

    int num = 0;

    int num1 = Integer.parseInt(e_one.getText().toString().trim(),16);
    int num2 =Integer.parseInt(e_two.getText().toString().trim(),16);

    if (appKey1.operation.equals("+")) 
        String value = Integer.toHexString(num1 + num2);

        num = Integer.parseInt(value, 16);
        t_result.setText(String.valueOf(Integer.toHexString(num)));

     else if (appKey1.operation.equals("-")) 

        String value = Integer.toHexString(num1 - num2);

        num = Integer.parseInt(value, 16);
        t_result.setText(String.valueOf(Integer.toHexString(num)));

     else if (appKey1.operation.equals("X")) 

        String value = Integer.toHexString(num1 * num2);
        num = Integer.parseInt(value, 16);

        t_result.setText(String.valueOf(Integer.toHexString(num)));

     else 


        String value = Integer.toHexString(num1 / num2);
        num = Integer.parseInt(value, 16);

        t_result.setText(String.valueOf(Integer.toHexString(num)));
    

除法运算的第二个问题是它给出 (result = 0 ) 它不是这样的 0.12324 在零之后没有小数。

我该如何解决这个代码?

【问题讨论】:

这能回答你的问题吗? Unfortunately MyApp has stopped. How can I solve this? 应用程序崩溃 - 查找堆栈跟踪 - 研究问题 - 修复代码 - 问题解决 【参考方案1】:
    当您将负整数转换为十六进制字符串时,您会得到一个十六进制表示的数字加上 2^32。例如,Integer.toHexString(-3) 为您提供fffffffd。您应该直接将结果字段设置为该值,但您尝试将此字符串转换回整数并再次转换为十六进制字符串。这对额外且不必要的转换失败了。它失败是因为十六进制数 fffffffd 太大而无法用整数表示。它只能适合Long。所以,
Integer.parseInt(Integer.toHexString(-3), 16);

java.lang.NumberFormatException 失败,但是

Long.parseLong(Integer.toHexString(-3), 16);

给你 4294967293,即 2^32 - 3。

TLDR,您应该避免将结果转换为整数并返回到十六进制字符串。将您的代码简化为

String value = Integer.toHexString(num1 - num2);
t_result.setText(value);

其他运算也是如此,而不仅仅是减法。

    除法的问题是结果的类型是整数。当然,整数结果不能有任何小数部分。您应该使用 double 来保存结果。 例如:
String value = Double.toHexString((double)num1 / num2);
t_result.setText(value);

这将为您提供小数部分。

【讨论】:

关于减法,结果给了我:( fffffffd ) 而不是 (-3) .. 我怎样才能转换成负数...谢谢你的帮助 :) 和关于分裂仍然崩溃和关闭应用程序

以上是关于减法和除法运算的十六进制计算器问题的主要内容,如果未能解决你的问题,请参考以下文章

2进制怎么算计算步骤?

深入理解计算机系统(2.6)---二进制整数的乘除法运算(重要)困难度高

添加,减法,除法和乘以存储在布尔数组中的两个二进制数

C/C++十六进制计算器[2023-05-25]

为何js计算带有小数的加法的时候会出现误差?

十六进制加法和减法怎么算?