黑马程序员技术交流社区

标题: 在听初级基础JAVA视频,遇到疑问,脑子转不过来 [打印本页]

作者: zhuhh359627543    时间: 2016-8-19 21:06
标题: 在听初级基础JAVA视频,遇到疑问,脑子转不过来
byte b = 3;
b=(byte)(b+200);
System.out.println(b);
怎么输出是 -53?   求详细解答~谢谢
作者: 小小丶白    时间: 2016-8-19 21:26
先看看这个吧

123.jpg (22.06 KB, 下载次数: 6)

过程

过程

作者: 水月灬清影    时间: 2016-8-19 21:31
我给你算算嗷……
byte是 -128~127 这知道吧。一个字节8位。
b+200=203,越界,截取后八位  二进制表示为 11001011,注意!最左边是符号位!而且这个数是补码!代表负数的符号位不变,补码  -1  得到反码,取反,得到原码   10110101    ——>  -53
再看遍视频吧兄弟,我记得视频里有详细讲解的。
作者: zhuhh359627543    时间: 2016-8-19 21:32
小小丶白 发表于 2016-8-19 21:26
先看看这个吧

怎么就得出负数呢?因为是第一个符号位是1,就立刻知道是负数~逻辑在哪里?还是这个是定理,死记硬背就可以?
作者: zhuhh359627543    时间: 2016-8-19 21:36
水月灬清影 发表于 2016-8-19 21:31
我给你算算嗷……
byte是 -128~127 这知道吧。一个字节8位。
b+200=203,越界,截取后八位  二进制表示为 1 ...

好吧,我好好再看看视频吧{:2_43:}

作者: zhuhh359627543    时间: 2016-8-19 21:38
zhuhh359627543 发表于 2016-8-19 21:32
怎么就得出负数呢?因为是第一个符号位是1,就立刻知道是负数~逻辑在哪里?还是这个是定理,死记硬背就可以? ...

谢谢你,我决定再认真看看视频
作者: 水月灬清影    时间: 2016-8-19 21:40
zhuhh359627543 发表于 2016-8-19 21:32
怎么就得出负数呢?因为是第一个符号位是1,就立刻知道是负数~逻辑在哪里?还是这个是定理,死记硬背就可以? ...

你要是问为什么符号位是1就是负数,我觉得你应该从头看视频,第二天吧好像,讲的进制。慢慢学,慢慢理解,放弃这题吧先……




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