黑马程序员技术交流社区
标题:
byte 提升为int的疑问
[打印本页]
作者:
位雪
时间:
2012-7-19 23:01
标题:
byte 提升为int的疑问
本帖最后由 位丹丹 于 2012-7-20 09:41 编辑
byte 类型-1提升了一个int类型 还是-1,是-1的原因是因为在8个1前面补的是1导致的。
只要在前面补0,即可以保留原字节数据不变,又可以避免-1的出现。
11111111 11111111 11111111 11111111
&00000000 00000000 00000000 11111111
-------------------------------------------------------
00000000 00000000 00000000 11111111
复制代码
我不明白的是byte的-1提升为int的-1,到底是怎么提升的,原理是什么?是不是byte型的-1提升为int型的值也是-1,所以前面才加24个1吗?
这一点一直想不明白,还望高手指点。
另外-1 & 255 是255,数据不是改变了吗?
作者:
rslheima
时间:
2012-7-19 23:48
首先:小类型转换成大类型,原数据是不会改变的。
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。
作者:
杨锦
时间:
2012-7-20 00:42
计算机存储负数是存储负数的补码
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是一定会类型提升的。
作者:
中国移动
时间:
2012-7-20 00:50
小类型转换大类型,原数据是不会变的
作者:
杨锦
时间:
2012-7-20 01:16
而且&255这个动作是用来取后8位的吧,并不是所有情况下&255都是本身,如果int情况下想得到-1本身,就应该&FFFF吧
作者:
郑彬
时间:
2012-7-20 08:14
是的,byte的-1转换成int-1,在计算机储存码里面,前面24位补1就行了。-1 & 255是255.因为-1的二进制全是1.而255前面是0。这样就是255里的1和0不变。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2