繁体   English   中英

0x01和0x01f之间的差异

[英]Differences between 0x01 and 0x01f

我正在查看Identicons的原始源代码。 有一些代码可以做一些小提取以提取红色,绿色和蓝色组件:

int blue = (code >> 16) & 0x01f;
int green = (code >> 21) & 0x01f;
int red = (code >> 27) & 0x01f;

代码变量是32位整数。

我的问题是:数字0x01和0x01f之间有什么区别?

我假设f表示值是浮点数,但为什么要将它设为浮点数? 是二进制中的float表示与整数表示不同吗? 如果特定语言不使用相同的表示,移植时是否会导致出于移植原因的问题?

另外,由于不理解0x01f问题,我可能会读错了,但这不仅仅是将红色,绿色和蓝色表示设置为0或1,具体取决于最低有效位?

这与浮子无关。 这是一个位掩码。

0x01f = 0b11111

当你&你的号码一起时,它会清除右边第5位左边的所有位。

这是0x0a2bfb & 0x01f => 0x00001b

0x0a2bfb : 0000 1010 0010 1011 1111 1011
0x01f    : 0000 0000 0000 0000 0001 1111 &
----------------------------------------
result   : 0000 0000 0000 0000 0001 1011

我不确定Java,但在C99中,hex浮动确实存在 ,它们看起来像这样:

0x50.1p3

p后缀是强制性的(用于表示2的幂来提高数字)。 因此,像0x01f这样的十六进制整数文字没有歧义。 编译器不会将f误认为浮点常量后缀,它会将其读作十六进制数字。

f在十六进制的上下文中不是浮点数。 0xf相当于十进制15

在您的示例中,代码正在查找颜色代码的最低5位,可能在15或16位颜色空间中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM