首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java运算符mod结果错误问题

java运算符mod结果错误问题
EN

Stack Overflow用户
提问于 2021-04-29 15:03:21
回答 2查看 48关注 0票数 0

我是一个java初学者。我正在尝试操作1个字节,但%mod操作的值很奇怪。代码如下:

代码语言:javascript
复制
ArrayList<byte[]> bytelist;
MessageDigest.GetInstance("MD5")
String MD5 = new BigInteger(1,byteBuffer).toString(16);
byte[] buffer = new byte[2];
System.arraycopy (byteBuffer,0, buffer, 0, 2);
byte.add(buffer);


byte bOperand = 16;  // (0x10)
aOperand = (byte)(bytelist.get(0)[0] % bOperand); // == 213 == (0xD5)
System.out.println("after : " + String.format("%02x",aOperand));

结果: f5 (12月11日)

期望值:5

EN

回答 2

Stack Overflow用户

发布于 2021-04-29 15:25:12

Java的字节总是有符号的,所以它们的范围是-128到127。无符号字节213在Java中表示为-43 (两者都具有二进制表示11010101)。

-43 mod 16是-11,这就是为什么你得到了意想不到的结果。

要对无符号字节进行操作,您需要更大的数据类型,如int。您可以使用Byte.toUnsignedInt将有符号字节转换为正int,然后对其进行操作:

代码语言:javascript
复制
aOperand = (byte)(Byte.toUnsignedInt(aOperand) % 16);
票数 2
EN

Stack Overflow用户

发布于 2021-04-29 15:22:23

byte中的所有数字类型一样,Java中的数字类型都是有符号的。所以没有表示213的字节-它溢出到-43。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67312492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档