日期:2014-05-20  浏览次数:20895 次

关于JAVA中给int和short赋值16进制形式值的问题
本帖最后由 sd3560531 于 2011-06-28 16:27:47 编辑
都知道int占32位,最高位是符号位那么我赋值一个16进制给他如
int a = 0xFFFFFFFF;编译器没有报错。表示-1;

而byte占8位,最高位是符号位,
照理说:byte = 0xFF;也应该是正确的。(1111 1111)表示-1;
但是这样赋值,编译器报错。
而:
byte s = 0x7F;是正确的。表示127。
byte s = 0x80;是错误的。本应该是(1000 0000 表示-128)

貌似是让最高位为1的赋值,编译器都认为是错的。
我想问的是,上面那些byte的赋值,为什么错了?为什么不跟int是一致的呢?

跟byte类似,short也是这样的问题,short s = 0x7fff;正确 而short s = 0x8000;错误

对了,我的JDK版本是1.6.0_10



------解决方案--------------------
A hexadecimal numeral consists of the leading ASCII characters 0x or 0X followed by one or more ASCII hexadecimal digits and can represent a positive, zero, or negative integer. Hexadecimal digits with values 10 through 15 are represented by the ASCII letters a through f or A through F, respectively; each letter used as a hexadecimal digit may be uppercase or lowercase.
0x开头的数字都是int类型,而不是byte或者short类型。
------解决方案--------------------
引用:
你的意思是:
类似这样的赋值 byte b = 0x80;都存在内部类型转换,0x80表示128,内部转换的时候超过了127因此报错。
而int i = 0x80000000;就不存在内部转换,直接把0x8000000应该表示的值赋值给i了。

是这样吗?


是的,int是32位的楼主如此复制,没超过自然可行咯。