下列哪些定义正确()
A int i = 0xFFFFFFFF;
B char c ='\u0571';
C byte b= 01;
D int i ='a';
E long l = 445555566666L;
答案:A,B,C,D,E
知识点:
(1)java的基本数据类型
名称 | 位数 | 范围 | 默认值 |
---|---|---|---|
byte | 8 | -2^7~2^7-1 | 0 |
short | 16 | -2^15~2^15-1 | 0 |
int | 32 | -2^31~2^31-1 | 0 |
long | 64 | -2^63~2^63-1 | 0 |
float | 32 | (+-)1.4E~45~(+-)3.4028235E+38 | 0.0 |
double | 64 | (+-4.9E~324~(+-1.7976931348623157E+308)) | 0.0 |
char | 16 | 0~2^16-1(/u0000~/uffff) | 0即空 |
boolean | 8 | true、false | false |
byte,short,int,long均为带符号的整数,因此它必须有一位二进制位表示符号。现在计算机中带符号整数都用补码表示。n位带符号整数的表示范围为-2^n-1~2^(n-1)-1。因此比如byte是8位带符号的整数,表示范围为-128~127。 byte b= 01,int i = 0xFFFFFFFF, long l = 445555566666L在其范围内因此赋值正确。而无符号整数整数的表示范围为 0~2^n-1。因此 char c ='\u0571';在其表示范围内。
为什么int i = 0xFFFFFFFF输出的结果是-1?
补码的求法:
(1)正数:一个正数的补码就是它本身的二进制。
(2)负数:先将该负数取绝对值写成二进制形式,对各二进制位按位取反,最后加1。
补码求法举例:
(1)求5的补码
5的补码即为它的二进制形式:00000101
(2)求-5的补码
*先将-5取绝对值然后写出其二进制形式:00000101
*按位取反:11111010
*加1:11111011
(3)int i = 0xFFFFFFFF为什么输出-1
* 0xFFFFFFFF最高位是1,符号位为1表示是负数。
*对 0xFFFFFFFF-1:FFFFFFFE
*按位取反得到其绝对值:00000001
*因是负数,所以最终是-1。
int i ='a'为什么输出97?
基本数据类型自动转换如如下图所示
char自动转换为int类型,‘a’对应的ascii码是97。
验证: