gpt4 book ai didi

java - 使用右移运算符屏蔽符号扩展 >>

转载 作者:行者123 更新时间:2023-12-01 18:02:25 25 4
gpt4 key购买 nike

我目前正在学习按位运算符,在《Java完全引用第九版》书中遇到了下面的例子。

我理解右移运算符 >> 的作用,但我不太确定这个示例实际上是如何工作的(也许我毕竟不明白 >> 是如何工作的)。有人可以向我解释一下吗?

Sometimes it is not desirable to sign-extend values when you are shifting them to the right. For example, the following program converts a byte value to its hexadecimal string representation. Notice that the shifted value is masked by ANDing it with 0x0f to discard any sign-extended bits so that the value can be used as an index into the array of hexadecimal characters.

// Masking sign extension.

class HexByte {

static public void main(String args[]) {
char hex[] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
};
byte b = (byte) 0xf1;
System.out.println("b = 0x" + hex[(b >> 4) & 0x0f] + hex[b & 0x0f]);
}
}

最佳答案

有符号左移 4 保留原始数字的符号。

但是 ((byte)0xf1) >> 4 是 -1,这不是你想要的。

您只需要低 4 位,这就是 & 0x0f 为您提供的低 4 位。这将为您提供 0xf,即前 4 位或 15。

关于java - 使用右移运算符屏蔽符号扩展 >>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39867332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com