Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是;“零扩展”;什么意思?_Java - Fatal编程技术网

Java 什么是;“零扩展”;什么意思?

Java 什么是;“零扩展”;什么意思?,java,Java,我在看由String、StringBufer和其他一些方法实现的接口,更具体地说是chars()方法,Javadoc说 返回一个整数为零的流,从该值扩展字符值 顺序 现在,我知道它返回int值。但是“零扩展”是什么意思呢?Int是32位的值,char是16位的值。零扩展仅仅意味着int中的高阶“未使用”位是零 我猜它是有文档记录的,因为从某种角度看,该操作将char值视为16位整数,并且当从整数转换为更大的整数时,像这样的库方法的用户必须知道如何处理符号 对于那些不知道的人,有符号整数值保留其最

我在看由
String
StringBufer
和其他一些方法实现的接口,更具体地说是
chars()
方法,Javadoc说

返回一个整数为零的流,从该值扩展字符值 顺序


现在,我知道它返回
int
值。但是“零扩展”是什么意思呢?

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