由于 SE 7 Java 允许将值指定为二进制文字。文档告诉我“字节”是一种可以保存 8 位信息的类型,值 -128 到 127。
现在我不知道为什么,但如果我尝试将二进制文字分配给 Java 中的一个字节,我无法定义 8 位,而只能定义 7 位,如下所示:
byte b = 0b000_0000; //solves to the value 0
byte b1 = 0b000_0001; //solves to the value 1
byte b3 = 0b000_0010; //solves to the value 2
byte b4 = 0b000_0011; //solves to the value 3
依此类推,直到我们使用这 7 位得到最后几种可能性:
byte b5 = 0b011_1111; //solves to the value 63
byte b6 = 0b111_1111; //solves to the value 127
如果我想让它成为负数,我必须在前面添加一个前导 - 像这样:
byte b7 = -0b111_1111; //solves to the value -127
现在我遇到的一半问题是我只使用 7 位来描述他们告诉我的是 8 位数据类型。下半部分是,除非使用 32 位 int 类型,我可以定义所有 32 位(包括“符号指示位”),否则它们似乎不会作为二进制补码进行线程化。
现在,当我搜索如何显示范围内的数字 -128 时,我被告知这样做没有任何进一步的解释:
byte b8 = 0b1111_1111_1111_1111_1111_1111_1000_0000;
我可以清楚地看到最后 8 位 (1000 0000) 确实使用 8 位表示 -128 二进制强制,但我仍然从未感到困惑并尝试问我的问题:
- 上面的 32 位长 nr 不是 32 位 (java-) int 值吗?
- 为什么我可以将 32 位值分配给 8 位(java-)字节类型?
或者一般来说:为什么我必须这样分配它?
任何有关此的链接/信息都会很棒!感谢您花时间阅读本文以及提前了解更多信息。
问候简