2017-02-11 48 views
3

我一直在寻找在Javadoc for the CharSequence接口,通过StringStringBufer执行和其他几个人,更确切地说,在chars()方法,以及Javadoc中说“零延伸”是什么意思?

返回流INT零扩展,从这个char值 序列。

现在,我知道它返回的值为int,而那int that can be cast to char。但是“零延伸”是什么意思?

+0

可能lsB和lsB + 1是char值,其他(msB,msB-1)是零,因此它们等于整数或任何基本整数需要等于的字符值 –

+3

我的猜测是通过将最高有效16位设置为0,将16位字符变成32位整数。 –

+1

char'bb'被映射到int'00bb'。有趣的是,他们没有CharStream等。提供所有原始版本的流和函数真的很烦人,他们停在'int,long,double'。 – ZhongYu

回答

6

Int是一个32位的值,char是一个16位的值。零扩展只意味着int中的高阶“未使用”位是零。

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

对于那些不知道的,有符号的整数值将其最高位保留为'符号位'。如果它是1,则该数字是否定的。当转换为一个更大的整数时,如果最高位被复制到新值的所有'额外'位中,我们说转换是“符号扩展”。只有这样做,新的整数才具有与较小的有符号整数相同的有符号数值。如果较小的整数值是无符号的,则最高位表示与所有其他位一样的值,并且只有没有符号扩展才会使值相同。

Java语言没有无符号整数作为数据类型,所以没有符号扩展的转换可能被认为是不寻常的。

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