A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 位雪 中级黑马   /  2012-7-19 23:01  /  1981 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 位丹丹 于 2012-7-20 09:41 编辑

  1. byte 类型-1提升了一个int类型 还是-1,是-1的原因是因为在8个1前面补的是1导致的。
  2. 只要在前面补0,即可以保留原字节数据不变,又可以避免-1的出现。

  3.   11111111 11111111 11111111 11111111
  4. &00000000 00000000 00000000 11111111
  5. -------------------------------------------------------
  6.   00000000 00000000 00000000 11111111
复制代码
我不明白的是byte的-1提升为int的-1,到底是怎么提升的,原理是什么?是不是byte型的-1提升为int型的值也是-1,所以前面才加24个1吗?
这一点一直想不明白,还望高手指点。
另外-1 & 255 是255,数据不是改变了吗?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
首先:小类型转换成大类型,原数据是不会改变的。
byte的-1原码:1000 0001反码:1111 1110 补码:1111 11111
转换成int也为-1
int的-1 原码:1000 0000 0000 0000 0000 0000 0000 0001
            反码:1111 1111 1111 1111 1111 1111 1111 1110
            补码:1111 1111 1111 1111 1111 1111 1111 1111
-1&255对于int来说确实是该变了呀变成了255,
-1&225对于byte来说没有改变原值 -1。


回复 使用道具 举报
计算机存储负数是存储负数的补码
byte: -1 原码:1000 0001
            补码:1111 1111
int:-1   原码:1000 0000 0000 0000 0000 0000 0000 0001
            补码:1111 1111 1111 1111 1111 1111 1111 1111
并不是在前面补了24个1.

-1&255            1111 1111 1111 1111 1111 1111 1111 1111
                    &0000 0000 0000 0000 0000 0000 1111 1111
                     —————————————————————————
               0000 0000 0000 0000 0000 0000 1111 1111 =255
byte 类型做不了-1&255吧,byte的值范围是—128~127,所以-1&255是一定会类型提升的。




回复 使用道具 举报
小类型转换大类型,原数据是不会变的
回复 使用道具 举报
而且&255这个动作是用来取后8位的吧,并不是所有情况下&255都是本身,如果int情况下想得到-1本身,就应该&FFFF吧
回复 使用道具 举报
是的,byte的-1转换成int-1,在计算机储存码里面,前面24位补1就行了。-1 & 255是255.因为-1的二进制全是1.而255前面是0。这样就是255里的1和0不变。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马