黑马程序员技术交流社区

标题: 强制类型转换的问题 [打印本页]

作者: 谢波    时间: 2013-3-15 17:50
标题: 强制类型转换的问题
本帖最后由 谢波 于 2013-3-15 18:10 编辑

byte b = (byte)129;
结果为:-127,请问这是为什么?
作者: 边道坚    时间: 2013-3-15 17:58
byte范围 -128~127之间。
最傻瓜式的办法,用二进制来转换,求出补码,不推荐。
这题可以巧算,当数字为127的时候,不溢出,相当于最大的正数。128的时候,溢出,相当于最小的负数,也就是-128。
所以,129就是-127

也就是说你定义已经越界了
作者: HM刘博    时间: 2013-3-15 17:59
因为byte表示字节,其范围是 —128------127,若超过这两个值,会循环数,像楼主说的 byte b = (byte)129;
因为129超出了其范围,比127大2,所以在从负数一边数两个数,依次为 —128,—127,。
因此打印出结果为—127.



作者: 谢波    时间: 2013-3-15 18:01
边道坚 发表于 2013-3-15 17:58
byte范围 -128~127之间。
最傻瓜式的办法,用二进制来转换,求出补码,不推荐。
这题可以巧算,当数字为127 ...

能详细点吗,谢谢
作者: HM汪磊    时间: 2013-3-15 18:01
byte的取值范围是-128-127
129是不可以转换成byte的。不然会以补码形式来转
例如:
byte x=127;那么执行x++语句后x=-128,在执行x++后x=-127;相当于循环取值,当超出最大值后,又从最小值开始取值
作者: 张洪慊    时间: 2013-3-15 18:04
129默认int型在计算机中以补码形式存在(32bit)
                                                         128  64 32  16   8   4  2  1
0000  0000  0000  0000  0000 0000  1     0   0    0    0   0  0  1
强制转换成byte->发生后8bit截断
                                                           1     0   0    0    0   0  0  1
最高位为1,说明为负值->此时为补码
->转换成原码->符号位除外,其余位取反+1
                                                           1     1   1    1   1   1   1   1
                                                           -  127
作者: 谢波    时间: 2013-3-15 18:10
张洪慊 发表于 2013-3-15 18:04
129默认int型在计算机中以补码形式存在(32bit)
                                                         ...

非常感谢,谢谢大家




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2