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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢波 中级黑马   /  2013-3-15 17:50  /  1836 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢波 于 2013-3-15 18:10 编辑

byte b = (byte)129;
结果为:-127,请问这是为什么?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

6 个回复

正序浏览
谢波 中级黑马 2013-3-15 18:10:22
7#
张洪慊 发表于 2013-3-15 18:04
129默认int型在计算机中以补码形式存在(32bit)
                                                         ...

非常感谢,谢谢大家
回复 使用道具 举报
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

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
byte的取值范围是-128-127
129是不可以转换成byte的。不然会以补码形式来转
例如:
byte x=127;那么执行x++语句后x=-128,在执行x++后x=-127;相当于循环取值,当超出最大值后,又从最小值开始取值
回复 使用道具 举报
边道坚 发表于 2013-3-15 17:58
byte范围 -128~127之间。
最傻瓜式的办法,用二进制来转换,求出补码,不推荐。
这题可以巧算,当数字为127 ...

能详细点吗,谢谢
回复 使用道具 举报
因为byte表示字节,其范围是 —128------127,若超过这两个值,会循环数,像楼主说的 byte b = (byte)129;
因为129超出了其范围,比127大2,所以在从负数一边数两个数,依次为 —128,—127,。
因此打印出结果为—127.


回复 使用道具 举报
byte范围 -128~127之间。
最傻瓜式的办法,用二进制来转换,求出补码,不推荐。
这题可以巧算,当数字为127的时候,不溢出,相当于最大的正数。128的时候,溢出,相当于最小的负数,也就是-128。
所以,129就是-127

也就是说你定义已经越界了

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 原理还是二进制

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马