Java:Java-byteタイプの演算の概要


Java:Java-byteタイプの演算の概要
ヒント:Javaのベースタイプbyteは1バイト、すなわち8ビットであり、最上位をシンボルビットとし、その他の取値は-128~127である.(1000,000,000は-128,000,000は0)
1-質問:次のプログラムのクリップの出力結果と原因を説明しますか?
byte n1 = 10 + 117;
byte n2 = 10 + 118;
System.out.println(n1);
System.out.println(n2);
		
byte n3 = -10 - 118;
byte n4 = -10 - 119;
System.out.println(n3);
System.out.println(n4);

1-回答:上のセグメントn 1の出力は127で、n 2はエラーをコンパイルして互換性のないタイプ(intからbyteに変換すると損失する可能性があります);n 3出力は-128、n 4コンパイルエラー互換性のないタイプ(intからbyteに変換すると損失する可能性があります)
1-解釈:ここでの10と117は字面量に属するためjavacコンパイル最適化後にbyte n=127となり、nのタイプはbyteであり、コンパイル後の等号右側の127のデフォルトタイプはintであるため、データ型が一致しないことになるが、このときjavacはbyteタイプの取値範囲(-128~127)内にあるか否かを判断し、範囲内であれば127のタイプがbyteに変換され、エラーが発生します.
2-質問:次のプログラムのクリップの出力結果と原因を話しますか?
byte n1 = 10;

byte n2 = n1 + 117;
System.out.println(n2);

byte n3 = (byte) 128;
System.out.println(n3);

byte n4 = (byte) (n1 + 117);
System.out.println(n4);
		
byte n5 = (byte) (n1 + 118);
System.out.println(n5);

2-回答:上記のセグメントn 2定義文コンパイルでは互換性のないタイプがエラーとなり、n 3出力は-128、n 4出力は127、n 5出力は-128となる.
2-解釈:n 2式では、等号の右側は定数ではないため、コンパイル時にbyeの値範囲にあるかどうかは判断できないため、直接エラーが報告され、n 1の前にfinalを加えればn 2は127を正しく出力することができる.
n 3,n 4,n 5式では,タイプ強転が明確に指定されているため,損失の可能性があることを明確に示しているので,出力に成功し,10+117はbyteの範囲内であるため,n 4出力127は問題ない.しかし128はbyteの範囲外であるため、損失をもたらし、n 3,n 5出力−128.
intとbyteの変換方法については、以下を参照してください.https://blog.csdn.net/qq_29229567/article/details/87091619
参照先:https://mp.weixin.qq.com/s/qZO3Z4aPBtJ21-WVCEgz3Q