当前位置: 首页 > 知识库问答 >
问题:

Java:字节到整数数学总和转换。相同的操作导致允许和不允许的操作

佟颖逸
2023-03-14

这大约是两个操作数中转换为字节后两个整数的总和。我只是试图理解为什么以下输出在Java中完美运行:

byte b1 = (byte)128 + (byte)18;   // ok
System.out.println( b1 );   

后者在编译时失败:

byte b2 = (byte)110 + (byte)18;  // compile-time error
System.out.println( b2 );  

除了用作操作数的int值之外,它们是相同的。在这两种情况下,结果都超出范围,但只有第二个代码段会抛出编译时错误(尽管其结果小于前一个)。为什么会这样?

共有3个答案

徐洛华
2023-03-14

正如Vikash Madhow提到的,这与您使用的数据类型有关。这个链接帮助了我:https://www.w3schools.com/java/java_data_types.asp#:~:text=Java中有八种基本数据类型:,从…到更多行的数字

你应该谨慎地使用强制转换,这是一种凌驾于计算机之上的方式,你说你知道最好的,这很容易破坏代码。如果您使用变量而不是硬编码的值,您可以很容易地看到其中的值,这可能会定期破坏代码

步炯
2023-03-14

(byte)128 等于 -128,因此在第一个示例中,您将向 -128 添加 18。您可以向字节添加其他强制转换,请参阅以下示例:

byte b2 = (byte) ((byte)110 + (byte)18);  
System.out.println( b2 );

或者

byte b2 = (byte) (110 + 18);  
System.out.println( b2 );
岳研
2023-03-14

由于使用了常量,编译器可以检查表达式产生的实际值。

在您的第一个表达式中,< code>(byte)128等于< code>-128,它加上< code>18产生一个有效字节,然后您将它赋给一个有效的字节变量。

然而,在第二个表达式中,< code>(byte)110 (byte)18的结果超出了字节范围,因此被转换为int类型,然后被赋值给byte,这是无效的。为了让第二个表达式工作,你应该把它改成< code > byte B1 =(byte)((byte)110(byte)18)

 类似资料:
  • 问题内容: 我正在尝试在用户空间中使用mmap读取“ mem_map”开始的物理内存。它是一个包含所有物理页面的数组。这是一台运行3.0内核的i386计算机。 代码是这样的: 我以此为根。输出为: 可以肯定的是,我搜索了问题并将以下行添加到我的/etc/sysctl.conf文件中: 但这也不起作用。 谁知道为什么不允许这样的mem_map操作,以及如何解决呢? 谢谢。 问题答案: 听起来好像内核

  • 当我试图打开索引时。php在浏览器中我看到错误: 在error.log: 2013/11/04 22:40:07[错误]3435#0:*4发送到stderr的FastCGI:“无法打开主脚本:/var/www/index.php(不允许操作)”,同时从上游读取响应头,客户端:10.0。2.2,服务器:localhost,请求:“GET/HTTP/1.1”,上游:fastcgi://127.0.0.

  • 我一直在捕捉非数字时遇到问题。 我试过了,但抓不住。如果我让它捕获非数字,但不让用户再次尝试输入。。。它完全停止了我的代码。 这是我的密码:

  • 我当前想在项目中安装节点sass,但每次出现此错误时 错误:无法重命名临时“发布/对象”。target/libsass/src/libsass/src/color\u maps-5ff12a01。o、 tmp“输出文件”发布/目标。target/libsass/src/libsass/src/color\u映射。o“:”不允许操作“生成了2个警告和1个错误。make:**[发布/obj.targe

  • 问题内容: 我想知道与int相比,java是否自动将Integer转换为int?还是==尝试比较原始元素上的引用? 这是真的吗?还是我需要做? 问题答案: 是的,使用参数进行比较时,如有必要,将取消装箱。 Java语言规范的相关部分: 15.21.1数值相等运算符==和!= 如果相等运算符的操作数都是数字类型,或者一个是数字类型,而另一个可以转换(第5.1.8节)为数字类型,则对操作数(第5.6.

  • 问题内容: 我正在尝试运行一个Python脚本,该脚本使用由后链接程序创建的二进制文件(xFiles.bin.addr_patched)。但是,我收到此错误。 当我通过ls-l检查此xFiles.bin的权限时,它表明 我认为错误是因为此文件是由其他应用程序创建的,我正在运行的python脚本无法访问它。因为我是ubuntu的初学者,所以我真的不知道如何解决它。对于如何解决这个问题,有任何的建议吗