Chinaunix首页 | 论坛 | 博客
  • 博客访问: 600145
  • 博文数量: 96
  • 博客积分: 1464
  • 博客等级: 上尉
  • 技术积分: 1539
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-12 23:24
文章分类

全部博文(96)

文章存档

2013年(29)

2012年(53)

2011年(14)

分类: Java

2012-10-21 11:40:11

有如下代码,判断a、b的值
short a = 128;
byte b = (byte) a;

结果为:
a = 128
b = -128

为什么呢??????????????????

byte 站一个字节 取值范围:-128~127        最高位为符号位,
short 站2个字节 取值范围:-32768~32767    最高位为符号位,

计算机中负数的存储方式是补码。
(对负数的绝对值的二进制取反,再加一,即为负数的二进制码)
    -1的绝对值1的二进制码为0000 0001,取反1111 1110,加一为1111 1111
    -128的绝对值128的二进制码为1000 0000,取反0111 1111,加一为1000 0000,是byte最大表示范围
    -129的绝对值129的二进制码为1000 0001,取反0111 1110,加一为0111 1111,是127了
    -127的绝对值127的二进制码为0111 1111,取反1000 0000,加一为1000 0001,
   
所以,short为128是,存储为0000 0000 1000 0000
强制转换为1byte时,取后一字节为:1000 0000
所以就成 -128 了





阅读(743) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~