代码如下:
short x = 0257;
System.out.println("x="+x);
结果如下:
x=175
这是为何,求大佬不吝赐教
128+40+7,0开头是8进制。0b是2进制,0x是十六进制
是的, 二进制数:以OB或Ob开头; 八进制数:以O开头; 十六进制数:以OX或Ox开头。
Short x = 0257;
System.out.printf("%04o\n",x);
0257 意為 8 进制的 257 。本身就等于 10 进制 175 ,与 short 没有关系
这个问题涉及到java语法默认的数值类型以及数值表达方式两个问题。
默认数值类型:
1、java中整数默认是4个字节的int
2、浮点数默认是8个字节的double
3、对于short编译器会自动进行类型转换,如果超过short范围,编译时期报错
4、对于long和float需要静态显示的指定类型,在数值屁股后面加上L和f,标识这是long和float,而不是默认类型
数值表达方式:
1、整数表达方式分为二进制、十进制、十六进制:
int a = 0b00000001;
int b = 01;
int c = 0x01;
编译器会通过前缀判断数值类型,0x开头的一定十六进制,否则0开头的一定是八进制,否则那就是十进制
2、浮点数表达方式分为两种
double a = 1.0;
double b = 1e-1;
所以short x = 0257;编译器一看就会在栈或者堆中分配两个字节的空间,然后0257是八进制数写入内存,打印的时候再转成十进制也就是175
初始化时以0开头的数认为是8进制,打印时默认为十进制输出128+40+7=175,所以结果为175