java移位操作的问题

gongweixin 发布于 2013/05/12 19:10
阅读 567
收藏 1

java编程思想第50页的第二段内容:

如果对char、btye或者short类型的数值进行移位处理,那么在移位进行之前,它们会被转换为int类型,并且得到的结果也是一个Int类型的值。只有数值右端的低5位才有用。这样可防止我们移位超过int型值所具有的位数(译注:因为2的5次方为32,而int型值只有32位。)



这里给我搞糊涂了、int 是32位,取右端的低5位,那表示的范围不就是0~2的五次方了么,这样数据丢失的也太多了吧,并且译注里的,又给我搞蒙了,怎么又算一次2的5次方来当int型的位数,在移位计算的时候不就已经是在用位数来算了么。
加载中
1
Jeky
Jeky
第三版翻译:
如果对 char、byte 或者 short 类型的数值进行移位处理,那么在移位进行之前,它们会自动 转换为 int,并且得到的结果也是一个 int 类型的值。而右侧操作数,作为真正移位的位数, 只有其二进制表示中的低 5 位才有用。这样可防止我们移位超过 int 型值所具有的位数。(译 注:因为 2 的 5 次方为 32,而 int 型值只有 32 位)。若对一个 long 类型的数值进行处理, 最后得到的结果也是 long。此时只会用到右侧操作数的低 6 位,以防止移位超过 long 型数 值具有的位数。

1
优游幻世
优游幻世

If you shift a char, byte, or short, it will be promoted to int before the shift takes place, and the result will be an int. Only the five low-order bits of the right-hand side will be used. This prevents you from shifting more than the number of bits in an int.

right-hand side指的应该是1>>8的8那个部分

gongweixin
gongweixin
嗯、是的、但第四版翻译的太含蓄了、
0
gongweixin
gongweixin

引用来自“Jeky”的答案

第三版翻译:
如果对 char、byte 或者 short 类型的数值进行移位处理,那么在移位进行之前,它们会自动 转换为 int,并且得到的结果也是一个 int 类型的值。而右侧操作数,作为真正移位的位数, 只有其二进制表示中的低 5 位才有用。这样可防止我们移位超过 int 型值所具有的位数。(译 注:因为 2 的 5 次方为 32,而 int 型值只有 32 位)。若对一个 long 类型的数值进行处理, 最后得到的结果也是 long。此时只会用到右侧操作数的低 6 位,以防止移位超过 long 型数 值具有的位数。

哦买噶的、 第四版怎么翻译的这么省略、非常感谢。
Jeky
Jeky
基本上这类书最好能看原版,看不了的话最好也能备一本原版电子版用来对照
0
zhangzhikai
zhangzhikai

引用来自“Jeky”的评论

第三版翻译:
如果对 char、byte 或者 short 类型的数值进行移位处理,那么在移位进行之前,它们会自动 转换为 int,并且得到的结果也是一个 int 类型的值。而右侧操作数,作为真正移位的位数, 只有其二进制表示中的低 5 位才有用。这样可防止我们移位超过 int 型值所具有的位数。(译 注:因为 2 的 5 次方为 32,而 int 型值只有 32 位)。若对一个 long 类型的数值进行处理, 最后得到的结果也是 long。此时只会用到右侧操作数的低 6 位,以防止移位超过 long 型数 值具有的位数。

太感谢了,解惑
返回顶部
顶部