猿问

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

问题0:

//编程语言为java
//这句话会报告类型不兼容,可能修饰精度的编译错误
byte b = 0x80;
//这句话则不会提示任何错误 
byte b = 0x70;

问题1:
0x80我们用通常的二进制(不涉及补码)的形式表示应该是1000 0000,请问这里二进制中的1是符号位吗(因为我猜想上述问题可能和符号位有关。。。)?
问题2:
如果byte b = -10; 系统是先检查-10的正负性然后计算补码并存储在计算机中吗?还是说“正数的补码是本身,负数的补码是取反+1”这句话本身只是一个规律性的总结所以不能这么理解?
问题3:
如何解释-2 和 4294967294 其实在内存类保存的都是0xFFFFFFFE

ITMISS
浏览 472回答 2
2回答

神不在的星期二

问题1:如果0x80能表示成1000 0000,说明这种表示方法是无符号二进制表示,不涉及符号位,1不是符号位。 问题2:补码是被定义的,不是规律性总结。byte b = -10这段代码必然使用经过解析和编译执行,然后存储数据,所以先检查-10的正负性然后计算补码是对的。 问题3:一块内存里有0xFFFFFFFE,这块内存其实可以被解释成任意的意思,关键是看程序按那种规则进行解释。如果把它看作是个无符号的整数,那它就是4294967294,如果把它看作补码,那就是-2。
随时随地看视频慕课网APP

相关分类

Java
我要回答