Bro*_*lip 7 java binary short twos-complement
最近我学会了在基础二系统中表示正整数和负整数的两种恭维方法.然后,我尝试使用带有以下短代码的java来实现此操作:
int a=2147483647;
System.out.println("a: "+a);
System.out.println("a+1: "+(a+1));
short b=32767;
System.out.println("b: "+b);
System.out.println("b+1: "+(b+1));
Run Code Online (Sandbox Code Playgroud)
哪个输出:
a:2147483647
a + 1:-2147483648
b:32767
b + 1:32768
这让我感到困惑,因为我认为b + 1,以二进制表示为011111111111111,将变为1000000000000000或十进制,-32768.这是怎么回事?
And*_*mas 11
虽然b很短,但表达式(b + 1)是int.右操作数是int,左操作数被提升为int,表达式是操作数的提升类型.
来自Java语言规范,5.6.2.二进制数字促销:
应用扩展基元转换(第5.1.2节)来转换由以下规则指定的一个或两个操作数:
- 如果任一操作数的类型为double,则另一个操作数转换为double.
- 否则,如果任一操作数的类型为float,则另一个操作数转换为float.
- 否则,如果任一操作数的类型为long,则另一个操作数转换为long.
- 否则,两个操作数都将转换为int类型.
请注意,即使两个操作数都是短类型,也会发生最后一次促销.你不能避免升级到int (b + (short) 1).
数值操作数上的加法表达式的类型是其操作数的提升类型.
| 归档时间: |
|
| 查看次数: |
607 次 |
| 最近记录: |