我一直在寻找在Javadoc for the CharSequence接口,通过String
,StringBufer
执行和其他几个人,更确切地说,在chars()
方法,以及Javadoc中说“零延伸”是什么意思?
返回流INT零扩展,从这个char值 序列。
现在,我知道它返回的值为int
,而那int
that can be cast to char
。但是“零延伸”是什么意思?
我一直在寻找在Javadoc for the CharSequence接口,通过String
,StringBufer
执行和其他几个人,更确切地说,在chars()
方法,以及Javadoc中说“零延伸”是什么意思?
返回流INT零扩展,从这个char值 序列。
现在,我知道它返回的值为int
,而那int
that can be cast to char
。但是“零延伸”是什么意思?
Int是一个32位的值,char是一个16位的值。零扩展只意味着int中的高阶“未使用”位是零。
我猜测它被记录是因为,以一种方式看,该操作将char
值视为一个16位整数,并且在从整数转换为较大整数时,库方法的用户这必须知道如何处理标志。
对于那些不知道的,有符号的整数值将其最高位保留为'符号位'。如果它是1,则该数字是否定的。当转换为一个更大的整数时,如果最高位被复制到新值的所有'额外'位中,我们说转换是“符号扩展”。只有这样做,新的整数才具有与较小的有符号整数相同的有符号数值。如果较小的整数值是无符号的,则最高位表示与所有其他位一样的值,并且只有没有符号扩展才会使值相同。
Java语言没有无符号整数作为数据类型,所以没有符号扩展的转换可能被认为是不寻常的。
如果有一个常量代表特定字符的(带符号)整数值,那么在转换为32位整数后,如果转换包含符号扩展名,则该常量将仍然是准确的。因此,了解给定的转换如何处理原始值是非常重要的。
可能lsB和lsB + 1是char值,其他(msB,msB-1)是零,因此它们等于整数或任何基本整数需要等于的字符值 –
我的猜测是通过将最高有效16位设置为0,将16位字符变成32位整数。 –
char'bb'被映射到int'00bb'。有趣的是,他们没有CharStream等。提供所有原始版本的流和函数真的很烦人,他们停在'int,long,double'。 – ZhongYu