为什么将short转换为char是一个狭窄的转换?

缩小转换是指将可以容纳较大值的数据类型放入可以容纳较小值的数据类型。

long l = 4L;

int i = (int)l;

但是,我不明白为什么将short转换为char会缩小转换范围,但是我有直觉,这与这两种数据类型的有符号/无符号有关,但我无法解释原因。

short s = 4; // short max value is 32767

char 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

回到顶部