java基础结算出每个类型的存储空间,和越界处理

首先是byte类型,占一个字节,8bit,也就是八个二进制组成。

int4个字节,4个字节,总共占32个bit二进制。

        // 定义了三个byte类型的变量,b1,b2,b3
        // b1的值是3,b2的值是4,b没有值
        byte b1 = 3, b2 = 4, b;

        //做加法运算先进行类型提升,变为int形,结果也是int型,所以int型返回byte类型就会出现可能损失精度的异常

        // b = b1 + b2;   错误的

        b = 3 + 4; // 常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错。


通过大的类型强制转换小的类型可能会出现损失精度的问题。

如下:

long y = 2147483679L;        这里的大小是大于2的31次方-1的,所以是越界的
        int x = (int) y;                接受后肯定会损失精度

        System.out.println(x);  注意是怎么结算这个值

分析过程:
        我们要想知道结果是什么,就应该知道是如何进行计算的。
        而我们又知道计算机中数据的运算都是补码进行的。
        而要得到补码,首先要计算出数据的二进制。
        
        A:获取2147483679L这个数据的二进制。

        10000000000000000000000000011111    

         因为这个数是正数       这是2147483679的原码,也是反码,还是补码。

                如果是负数也可以直接用这种方式,最后将答案取反就可以了

        B:做截取操作,截成int类型的了。
            10000000000000000000000000011111   
            这个结果是补码。
        C:已知补码求原码。
                    符号位        数值位
            补码:    1 为负并执行反码操作           0000000000000000000000000011111   
            
            反码:    1                                           1111111111111111111111111100001  
            

            原码:    1                                           1111111111111111111111111100001 

最后等于-2147483617


谢谢观看,点个赞吧!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值