“零延伸”是什么意思?

时间:2017-02-11 01:43:46

标签: java

我正在查看由StringStringBufer和其他一些人实施的Javadoc for the CharSequence界面,更具体地说是chars()方法,Javadoc说

  

返回一个int流,从中对此值进行零扩展   序列

现在,我知道它会返回int个值,而int that can be cast to char。但“零延伸”意味着什么?

1 个答案:

答案 0 :(得分:13)

Int是32位值,char是16位值。零延伸只意味着高阶"未使用" int中的位是零。

我猜它是有记录的,因为,以一种方式查看,操作将char值视为16位整数,并且当从整数转换为更大的整数时,库的用户这样的方法必须知道如何处理标志。

对于那些不知道的人,有符号整数值保留其最高位作为符号位&#39 ;;如果是1,则该数字为负数。当转换为更大的整数时,如果最高位被复制到所有'额外的'在新值中的位,我们说转换是"符号扩展"。只有这样做,新整数才会与较小的有符号整数具有相同的有符号数值。如果较小的整数值是无符号的,则最高位表示与所有其他位一样的值,并且仅在没有符号扩展的情况下,值将是相同的。

Java语言没有无符号整数作为数据类型,因此没有符号扩展名的转换可能会被视为异常。

如果一个常量表示特定字符​​的(带符号)整数值,则在转换为32位整数后,如果转换包含符号扩展,则该常量仍然是准确的。因此,了解任何给定转换如何处理原始值非常重要。