如何获取属于超出范围的字节的值?
How to get value of byte that belongs to out of range?
{double a = 295.04;
int b = 300;
byte c = (byte) a;
byte d = (byte) b;
System.out.Println(c +" " + d);}
字节的存储大小为 8 位,最大正字节值为 127.so c 不等于 300.Then 我尝试将 300 转换为二进制 number.The 二进制数(的300) 有 9 bits.I 混淆获取 c 和 d 的值。
为什么我得到 c = 39 和 d = 44?
此代码打印出您所期望的内容:
public class Sample {
public static void main(String[] args) {
double a = 295.04;
int b = 300;
byte c = (byte) a;
byte d = (byte) b;
System.out.println(c + " " + d);
}
}
您需要使用 println
而不是 Println
。我在 IntelliJ 中得到的输出是:39 44
.
你这里四舍五入,溢出
byte c = (byte) 295.04;
// will be rounded to 295
// and then overflows +128 as 295 -> 39 (mod 256)
byte d = (byte) 300;
// overflows +128 as 300 -> 44 (mod 256)
显然,这些是 "lossy" 次转化。这就是为什么 Java 不允许你在没有显式转换的情况下这样做。当您进行此转换时,您应该已经考虑了超出范围的值会发生什么情况。
字节是 java 中的带符号原始数据类型。当我们分配比字节值更大的东西时,就像一个循环。
假设您在字节变量中输入了 300。
在第一个循环字节变量以 0,127 表示第 128 位之后 // 300-128 = 172
在第二个循环字节变量后,0,127 表示第 128 位 // 172-128 = 44
现在第三个周期是44,希望这能回答你的问题。
好吧,试着理解这个概念:java 中的字节范围是 8 位,这意味着它最多可以保存值 (2^8) 所以当你写一个大于 256 的值时(即, 2^8) 它所做的是用 256 取模。假设如果我想将 300 转换为字节,则输出将是 44(300%256)。类似地,对于任何整数 n,字节等效值是 (n%256) .
美好的一天
{double a = 295.04;
int b = 300;
byte c = (byte) a;
byte d = (byte) b;
System.out.Println(c +" " + d);}
字节的存储大小为 8 位,最大正字节值为 127.so c 不等于 300.Then 我尝试将 300 转换为二进制 number.The 二进制数(的300) 有 9 bits.I 混淆获取 c 和 d 的值。 为什么我得到 c = 39 和 d = 44?
此代码打印出您所期望的内容:
public class Sample {
public static void main(String[] args) {
double a = 295.04;
int b = 300;
byte c = (byte) a;
byte d = (byte) b;
System.out.println(c + " " + d);
}
}
您需要使用 println
而不是 Println
。我在 IntelliJ 中得到的输出是:39 44
.
你这里四舍五入,溢出
byte c = (byte) 295.04;
// will be rounded to 295
// and then overflows +128 as 295 -> 39 (mod 256)
byte d = (byte) 300;
// overflows +128 as 300 -> 44 (mod 256)
显然,这些是 "lossy" 次转化。这就是为什么 Java 不允许你在没有显式转换的情况下这样做。当您进行此转换时,您应该已经考虑了超出范围的值会发生什么情况。
字节是 java 中的带符号原始数据类型。当我们分配比字节值更大的东西时,就像一个循环。
假设您在字节变量中输入了 300。 在第一个循环字节变量以 0,127 表示第 128 位之后 // 300-128 = 172
在第二个循环字节变量后,0,127 表示第 128 位 // 172-128 = 44
现在第三个周期是44,希望这能回答你的问题。
好吧,试着理解这个概念:java 中的字节范围是 8 位,这意味着它最多可以保存值 (2^8) 所以当你写一个大于 256 的值时(即, 2^8) 它所做的是用 256 取模。假设如果我想将 300 转换为字节,则输出将是 44(300%256)。类似地,对于任何整数 n,字节等效值是 (n%256) .
美好的一天