为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 byte b = 0x80;报告类型不兼容,而byte b = 0x70没有错误信息?

为什么 byte b = 0x80;报告类型不兼容,而byte b = 0x70没有错误信息?

ITMISS 2019-01-19 12:12:46
问题0: //编程语言为java //这句话会报告类型不兼容,可能修饰精度的编译错误 byte b = 0x80; //这句话则不会提示任何错误 byte b = 0x70; 问题1:0x80我们用通常的二进制(不涉及补码)的形式表示应该是1000 0000,请问这里二进制中的1是符号位吗(因为我猜想上述问题可能和符号位有关。。。)?问题2:如果byte b = -10; 系统是先检查-10的正负性然后计算补码并存储在计算机中吗?还是说“正数的补码是本身,负数的补码是取反+1”这句话本身只是一个规律性的总结所以不能这么理解?问题3:如何解释-2 和 4294967294 其实在内存类保存的都是0xFFFFFFFE
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

问题1:如果0x80能表示成1000 0000,说明这种表示方法是无符号二进制表示,不涉及符号位,1不是符号位。

问题2:补码是被定义的,不是规律性总结。byte b = -10这段代码必然使用经过解析和编译执行,然后存储数据,所以先检查-10的正负性然后计算补码是对的。

问题3:一块内存里有0xFFFFFFFE,这块内存其实可以被解释成任意的意思,关键是看程序按那种规则进行解释。如果把它看作是个无符号的整数,那它就是4294967294,如果把它看作补码,那就是-2。

查看完整回答
反对 回复 2019-02-12
  • 2 回答
  • 0 关注
  • 471 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号