问题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。
添加回答
举报
0/150
提交
取消