在Java 中整数类型都是有符号的,由低位往高位扩展的时候,默认是通过补符号位扩展,从而保证十进制数值不变。
符号位扩展,对于负数,在保留符号位为最高位,其余位数用1填充,对于整数,跟补零扩展是一样的,其余的位数全部用0填充
借用其他文章的总结:
引用:
https://blog.csdn.net/qq_35559358/article/details/78964089?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
因为Java中只有有符号数,当byte扩展到short, int时,即正数都一样,因为符号位是0,所以无论如何都是补零扩展;但负数补零扩展和按符号位扩展结果完全不同。 补符号数,原数值不变。 补零时,相当于把有符号数看成无符号数,比如-127 = 0x81,看成无符号数就是129, 256 + (- 127)。 对于有符号数,从小扩展大时,需要用&0xff这样方式来确保是按补零扩展。 而从大向小处理,符号位自动无效,所以不用处理。
|