加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

int类型强制转换为 byte类型

(2012-11-27 18:35:54)
标签:

强制类型转换

分类: java
  1. public class Test  
  2.     public static void main(String[] args)  
  3.         int start -131 
  4.         int end 131 
  5.   
  6.         for (int start; end; i++)   
  7.             if ((byte!= i)   
  8.                 System.out.println("原数:" "\t转化后:" (bytei);  
  9.      
  10.   
  11.  
    程序运行结果如下:
  1. 原数:-131 转化后:125  
  2. 原数:-130 转化后:126  
  3. 原数:-129 转化后:127  
  4. 原数:128  转化后:-128  
  5. 原数:129  转化后:-127  
  6. 原数:130  转化后:-126  
    为什么会出现这种情况呢?
    因为Java中byte是用8位来存储,只能表示-128~127之间的数,当由int强制类型转化为byte时,系统就采取了截取int后8位的做法。
  1. //java采用补码存储整数,int型为32位,byte为8位  
  2. //那么130在内存中的表示形式:00000000 00000000 00000000 10000010  
  3. //这样截取后8位就变成10000010,补码表示的时候第一位是符号位,0正1负,  
  4. //所以可以知道10000010肯定是一个负数了,再来看它的数值部分,  
  5. //补码由正数变负数,还是正数变负,方法:“按位取反,再加1”,  
  6. //所以0000010应该变为1111101 1111110(即126)  
  7. //又因为是负数,所以就截取变成-126了  
  8.   
  9. //我们再来看下-130的例子(符号位是1,其余按位取反+1)  
  10. //-130在内存中的表示形式:11111111 11111111 11111111 01111110  
  11. //这样截取后8位就变成01111110  
  12. //显然这是整数啊,然后数值部分是126  
  13. //64+32+16+8+4+2=126  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有