0x01和0x01f之间的差异

Bra*_*rad 3 java floating-point int hex

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

int blue = (code >> 16) & 0x01f;
int green = (code >> 21) & 0x01f;
int red = (code >> 27) & 0x01f;
Run Code Online (Sandbox Code Playgroud)

代码变量是32位整数.

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

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

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

Nul*_*ion 10

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

0x01f = 0b11111
Run Code Online (Sandbox Code Playgroud)

当你&使用它的数字时,它会清除右边第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
Run Code Online (Sandbox Code Playgroud)