Java中的强制类型转换 大数转小数
首先要明确一下转换规则:大数转小数,多出的高位部分会被截断。比如int占4个byte(32bit),byte占1个byte(8bit),那int转byte,int高位多出的那24个bit会被截断。
例1:
intb=233;//正整数强转 System.out.println((byte)b); //原码:00000000000000000000000011101001 //补码(内存):00000000000000000000000011101001//正数的原码、反码、补码都一样 //截取... //补码(截取后-内存):11101001//最高位是1,说明是负数,因此在显示的时候还需要做转化... //反码:11101000 //原码:10010111//16+4+2+1=-23(注意符号位是1,是负数)
例2:
intb=-233;//负整数强转 System.out.println((byte)b); //原码:10000000000000000000000011101001//因为是负数,所以符号位是1 //反码:11111111111111111111111100010110//负数的反码,符号位不变,其它位取反 //补码(内存):11111111111111111111111100010111//负数的补码等于它的反码+1 //截取... //补码(截取后-内存):00010111//最高位是0,说明是正数,正数的原码、反码、补码都一样 //原码:00010111//16+4+2+1=23
Note:
1.数字在内存中进行计算的时候始终是以补码的形式进行的,但是显示给我们用户看的时候却是以原码的形式展示的,因此在运算之前必须先转换成补码的形式。
2.int转byte,截断的是高位的24个bit,int转short,截断的则是高位的16个bit,依此类推。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。