不管char型数值转换成什么型,都执行零扩展
最初的数值类型是有符号的,则执行符号扩展
符号扩展:当用更多的内存存储某一个有符号数时,由于符号位位于该数的第一位,扩展之后,符号位仍然需要位于第一位,所以,当扩展一个负数的时候需要将扩展的高位全赋为1.对于正数而言,符号扩展和零扩展是一样的,因为符号位就是0.
比如一个用一个8位二进制表示-1,则是10000001
如果把这个书用16位二进制表示时,则为11111111 10000001 高位全都是1,这个叫做符号扩展,主要用于对其操作数。
零扩展:全补零,不论其符号位是多少,高8位全都补0.
package ch2_expressive_puzzlers.puzzle_6;
public class Multicast {
public static void main(String[] args) {
System.out.println((int) (char) (byte) -1); // int->byte ->char ->int
//bits 32 8 16 32
}
}
//out 65535=2^16-1
//out int -> byte -> char -> int
//bits 32 8 16 32
//11111111111111111111111111111111 11111111 1111111111111111 00000000000000001111111111111111