我需要对一个字节(2*x*x)+x执行以下操作,其中x是一个单字节。我可以直接执行该操作吗,就像我们对int所做的那样。如果不能,我们如何执行上述操作。
(2*x*x)+x
uplii1fm1#
你试过以下方法吗?
byte x = int f = 2 * x * x + x;
作为一个练习,我建议你打印出每一个可能的字节值的结果,看看你是否得到了期望的值。
dgiusagp2#
是的。Java整数运算是二进制补码;这意味着(只要有足够的比特来写下这些值)加长或缩短字段不会影响结果。注意1:检查溢出。如果结果不在128/-127范围内,它将不适合一个字节(或255/0表示无符号)。注意2:浮点型和双精度型不是整数运算的一部分。
t9aqgxwy3#
显然,你相信运算符的存在是因为编译器允许它,但你不相信JVM会正确地计算结果,为什么?测试起来有多难?每个字节只有256个值。
wqnecbli4#
可能有两种不同的情况:byte a = 2; byte b = 2; byte c = a*b它是正确的,但是byte a = 22; byte b = 22; byte c = a*b这是不正确的。因为当赋值给a和b时,我们给出了小于127的值,但相乘后,该值比一个字节长,这就是为什么我们需要一个更大的数据类型来存储c的值。对于这种情况,可以使用int c = a*b;
byte a = 2; byte b = 2; byte c = a*b
byte a = 22; byte b = 22; byte c = a*b
int c = a*b;
4条答案
按热度按时间uplii1fm1#
你试过以下方法吗?
作为一个练习,我建议你打印出每一个可能的字节值的结果,看看你是否得到了期望的值。
dgiusagp2#
是的。
Java整数运算是二进制补码;这意味着(只要有足够的比特来写下这些值)加长或缩短字段不会影响结果。
注意1:检查溢出。如果结果不在128/-127范围内,它将不适合一个字节(或255/0表示无符号)。
注意2:浮点型和双精度型不是整数运算的一部分。
t9aqgxwy3#
显然,你相信运算符的存在是因为编译器允许它,但你不相信JVM会正确地计算结果,为什么?
测试起来有多难?每个字节只有256个值。
wqnecbli4#
可能有两种不同的情况:
byte a = 2; byte b = 2; byte c = a*b
它是正确的,但是byte a = 22; byte b = 22; byte c = a*b
这是不正确的。因为当赋值给a和b时,我们给出了小于127的值,但相乘后,该值比一个字节长,这就是为什么我们需要一个更大的数据类型来存储c的值。对于这种情况,可以使用
int c = a*b;