Java int和byte的类型转换和+=的用法

文章讨论了Java编程语言中int和byte两种数据类型的特点,包括它们的位数、范围以及在计算机中的表示方式,如原码、反码和补码。接着,解释了强制类型转换可能导致的数据精度损失和报错情况,特别是涉及int到byte的转换。最后,通过示例展示了a+=b与a=a+b在byte和int类型上的差异,前者在某些情况下可以避免精度损失的错误。
摘要由CSDN通过智能技术生成

1.int 和 byte 的简介:

int :用于定义整型类型变量的标识符,4字节,占用32位,范围 -2147483648~2147483647[-2^31~2^31-1]。

byte :用于声明字节类型变量的标识符,1字节,占用8位,范围 -128~127[-2^8~2^8-1]。

2.计算机数和真值,原码、反码和补码:

机器数一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。

真值真值可以理解为真正的值,一般用十进制表示,也可以用二进制表示。

原码是一种 计算机 中对数字的 二进制 定点表示方法。 原码表示法在数值前面增加了一位符号位(即最高位为符号位): 正数 该位为0,负数该位为1。

反码正数的原码反码是一样的,负数的反码就是符号位不变其余的各个位依次取反。

补码正数的补码和原码是一样的,负数的补码就是在反码的基础上加一。

3.强制类型的转换:

public class Example{
        public static void main(String[] args){
                 int a = 10;
                 byte b = 10;
                 int c = a + b;
                 System.out.println("c = " + c);
        }
}

当c为int 类型时,该代码可以运行,并输出结果c = 20。

public class Example{
        public static void main(String[] args){
                 int a = 10;
                 byte b = 10;
                 byte c = a + b;
                 System.out.println("c = " + c);
        }
}

当c为byte类型时,改代码报错,无法输出结果。

出现这种错误是因为c为byte类型而a为int类型的数据,byte类型的数据只占8位,int类型却占有32位,如果将int类型的数据转换为byte类型的数据,则要将其原有的32位减少为8位,则int类型的前24位会损失,只留下后8位,因此可能会有数据精度的损失,(例如:当a的值超过128时,int形成的机器数要超过后面8位,而如果将此int类型的值转换位byte类型的值时只能取后面八位,前面24位含有数据的被舍弃,导致数据精度损失较大),使用会报错而无法输出结果。

4. a += b 和a = a  + b在byte和int的问题:

public class Example {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        int c = 10;
        b = b + a;
        c += a;
        System.out.println("b = " + b);
        System.out.println("c = " + c);
    }
}

当a、b、c都为int类型的数据时,b = b + a和c += a都可以正常的运行,得出结果b = 20, c = 20。

public class Example {
    public static void main(String[] args) {
        byte a = 10;
        byte b = 10;
        b += a;
        System.out.println("b = " + b);
    }

}

当a、b为byte类型当数据时,b += a可以正常的运行,得出结果为b = 20。

public class Example {
    public static void main(String[] args) {
        byte a = 10;
        byte b = 10;
        byte c = 10;
        b = a + b;
        System.out.println("b = " + b);
    }
}

当a、b为byte类型的数据时,b = b + a会报错,无法得出结果。

出现该情况的原因是因为在等号右边两个byte类型的数据相加时,java机制会先把等号右边的两个byte类型转换为两国int的类型,再进行int类型数据的运算,得到等号右边的值为int类型的值,而等号左边的仍为byte类型,在等号的赋值作用下,int类型的数据赋值给了byte类型,因此造成了可能会有数据精度损失(为什么会有损失看第3点),因此报错。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值