【问题标题】:What does "zero-extend" mean?“零扩展”是什么意思?
【发布时间】:2017-06-29 12:06:01
【问题描述】:

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

返回一个 int 流,对 char 值进行零扩展 顺序。

现在,我知道它返回 int 值,以及 int that can be cast to char。但是“零扩展”是什么意思呢?

【问题讨论】:

  • 可能 lsB 和 lsB+1 是 char 值,其他 (msB,msB-1) 为零,因此它们在整数或任何基础整数方面等于 char 值需要等于
  • 我的猜测是通过将最重要的 16 位设置为 0,将 16 位 char 变成 32 位 int。
  • char bb 映射到 int 00bb。有趣的是,他们没有CharStream等。提供所有原始版本的流和函数真的很烦人,他们停在int, long, double

标签: java


【解决方案1】:

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

我猜它已记录在案,因为从某种角度来看,该操作将 char 值视为 16 位整数,并且当从整数转换为更大的整数时,库方法的用户如因为这必须知道如何处理标志。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-20
    • 2015-07-09
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    相关资源
    最近更新 更多