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

我的字节突然变成负数,倒计数

赫连永怡
2023-03-14

我有一些代码,每当它通过我的循环,就增加一个字节8位。一切都如我所料,直到我达到120,然后我的数字突然变成负数。

法典:

byte b = 0;

for(int i = 0; i < 0x100; i += 8) {
    System.out.print(b + " ");
    b += 8;
}

输出:

0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120-128-120-112-104-96-88-80-72-64-56-48-40-32-24-16-8

我想看到的:

0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168 176 184 192 200 208 216 224 232 240 248 256

有人知道为什么120后开始倒数而不是上到256吗?

共有3个答案

澹台星剑
2023-03-14

因为它不符合byte的范围。< code>byte的范围是从-128到127。byte数据类型是8位有符号二进制补码整数。根据JLS 4.2.1,它的最小值为-128,最大值为127(包括127):

对于字节,从-128到127,包括128和127

因此,值128实际上是byte中的-128

董和风
2023-03-14

字节是一个范围从-128到127的有符号量。一旦达到127,它就会返回到最低的负数。

赵飞雨
2023-03-14

有人知道为什么120后开始倒数而不是上到256吗?

对Java字节是有符号的——就这么简单。根据JLS第4.2.1节:

整型的值是以下范围内的整数:

    < li >对于字节,从-128到127,包括128和127 <李>...

将字节值显示为无符号的最简单方法是将其提升为< code>int并使用0xff对其进行掩码:

System.out.print((b & 0xff) + " ");

(<代码>

 类似资料:
  • 问题内容: 自从我开始将eclipse用于项目Euler以来,我注意到大数字有时变成了看似随机的负数。我想这与传递类型的boudry有关。 如果您能向我解释这些负数是如何产生的以及其背后的逻辑是什么,我将很高兴。另外,如何避免使用它们(最好不要使用BigInteger类)。丹克!=) 问题答案: 此图显示了您要查找的内容。在您的情况下,数字显然更大,但原理保持不变。 Java中的限制示例为: in

  • 我试图制作一个在浏览器中工作的UTC午夜的JavaScript倒计时器(通常转换为本地时间)。 这是我现在在我的网站上使用的东西。

  • 问题内容: 我正在尝试使我的元素保持原状(过渡之后)。现在,翻译后的位置是我想要的位置,但随后我的名字又回到了报价单上。我是否缺少一段代码,或者是否有一段代码使这种回弹发生? 问题答案: 原因和解决方法: CSS转换通常不能应用于具有设置的元素。虽然奇怪的是,这种情况似乎最初发生在回弹之前,但解决方案是将设置更改为下面的代码段所示。 如果元素不可变形,为什么最初会对其进行翻译? 浏览器(至少是Ch

  • 问题内容: 我正在将文件读取成块的字节数组,然后通过POST请求通过网络将其发送到Web服务器。没什么复杂的,在使用完全相同的代码之前,我已经完成了。这次,我注意到我的图像到达服务器时看起来真的很奇怪,所以我决定查看发送的字节数组和接收的字节数组,以确保它是相同的。不是。在Java发送端,字节数组包含负数。在C#接收端,没有负数。 接收方的前15个字节(C#) 那些相同的字节,但是在发送端(jav

  • 试图对这个问题中的各个数字求和。然而,当涉及负数时,函数就会分崩离析。这是因为当您使用toString()时,会将负号转换为NewStr中的值。例如,在本例中,newstr[0]==='-'。不管怎么说都是为了解决这个问题?最好使用Number()函数

  • 输出为 40 -128 第一个输出是40,我理解,但第二个输出是128,怎么可能?是否可能是因为它超出了其范围?如果是,它在字节转换后是如何工作的。。。帮助我