为什么将short转换为char是一个狭窄的转换?
缩小转换是指将可以容纳较大值的数据类型放入可以容纳较小值的数据类型。
long l = 4L;int i = (int)l;
但是,我不明白为什么将short转换为char会缩小转换范围,但是我有直觉,这与这两种数据类型的有符号/无符号有关,但我无法解释原因。
short s = 4; // short max value is 32767char c = (char)s; // char max value is 65535
看起来这将是一个扩大的转换,或者至少不会缩小或扩大,因为它们都是16位并且可以容纳相同数量的值。
System.out.println((int)Character.MIN_VALUE); //0 System.out.println((int)Character.MAX_VALUE); //65535
System.out.println(Short.MIN_VALUE); //-32768
System.out.println(Short.MAX_VALUE); //32767
//65535 = 32768+32767
回答:
这是因为a short
可以保持负值,而char
您可能从中看不到Character.MIN_VALUE
。让我举几个例子。
short s = -124; char c = 124; // OK, no compile time error
char d = -124; // NOT OK, compile time error since char cannot hold -ve values
char e = s; // NOT OK, compile time error since a short might have -ve values which char won't be able to hold
char f = (char)s; // OK, type casting. The negative number -124 gets converted to 65412 so that char can hold it
System.out.println((short)f); // -124, gets converted back to a number short can hold because short won't be able to hold 65412
System.out.println((int)f); // 65412, gets converted to 65412 because int can easily hold it.
A(负)号-n
转换为时char
,变得2^16-n
。因此,-124
成为
2^16-124 = 65412
我希望这有帮助。
以上是 为什么将short转换为char是一个狭窄的转换? 的全部内容, 来源链接: utcz.com/qa/405451.html