【发布时间】:2011-03-27 02:58:09
【问题描述】:
我正在查看 Identicons 的原始源代码。 有一些代码可以用来提取红色、绿色和蓝色分量:
int blue = (code >> 16) & 0x01f;
int green = (code >> 21) & 0x01f;
int red = (code >> 27) & 0x01f;
代码变量是一个 32 位整数。
我的问题是:数字 0x01 和 0x01f 有什么区别?
我假设 f 表示该值是浮点数,但为什么要让它成为浮点数?二进制中的浮点表示与整数表示不同吗?如果特定语言不使用相同的表示形式,那么在移植时不会因为可移植性原因而导致问题吗?
另外,由于不了解 0x01f 问题,我可能读错了,但这不只是根据最低有效位将红色、绿色和蓝色表示设置为 0 或 1 吗?
【问题讨论】:
-
当然,我太傻了。我的大脑今天显然还没有启动。因此,通过此代码,RGB 数据将是 16 位 565 RGB 值。但是颜色的绿色分量只使用了 6 位中的 5 位。这是否意味着 Identicon 代码没有使用哈希、ip 等中提供的总位数?
-
Identicons 到底是什么?霸天虎的一些远亲?
-
标识是分配给您的 StackOverflow 配置文件的图像(就像我的天赋在那里的粉红色和白色标识一样)。它们是基于单个整数创建的,以唯一标识用户。因此,例如,如果我匿名发帖,并且我发布的每个帖子都附有一张图片,那么没有人可以假装他们是我(因为他们有不同的 IP,它会散列到不同的图片)。你可以使用它用于很多事情,IP,文件哈希等。它允许人类快速解释给定图像是否与特定哈希匹配,而无需查看十六进制编码的数字。
标签: java floating-point hex int