ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

理解 Java 中的 &0xff 值

2021-06-15 02:03:12  阅读:223  来源: 互联网

标签:Java 字节 int assertEquals 理解 rgba 0xff 我们


综述

0xff 是一个以十六进制数字系统(基数为 16)表示的数字。它由两个十六进制的 F 数字组成。众所周知,十六进制中的 F 相当于二进制数字系统中的 1111。所以,二进制的 0xff 是 11111111。

我们将了解如何使用0xff值。此外,我们将了解如何使用多种数据类型表示它,以及如何与&操作符一起使用它。最后,我们将回顾使用它的一些好处。

用不同的数据类型表示0xff

Java 允许我们通过使用 0x 前缀和整数文字来定义解释为十六进制(基数为 16)的数字。0xff 相当于无符号十进制的 255、有符号十进制的 -127 和二进制的 11111111。

因此,如果我们定义一个值为 0xff 的 int 变量,由于 Java 使用 32 位表示整数,因此 0xff 的值为 255:

int x = 0xff;
assertEquals(255, x);

但是,如果我们定义一个值为 0xff 的字节变量,因为 Java 使用 8 位表示一个字节,并且因为字节是有符号数据类型,所以 0xff 的值为 -1:

byte y = (byte) 0xff;
assertEquals(-1, y);

如我们所见,当我们定义一个值为 0xff 的字节变量时,我们需要将其向下转换为字节,因为字节数据类型的范围是从 -128 到 127。

& 0xff 操作的常见用法

& 运算符执行按位与运算。如果两个操作数的相应位为 1,则按位 AND 的输出为 1。另一方面,如果操作数的任一位为 0,则相应位的结果被计算为 0。

由于 0xff 在最后 8 位中有 8 个 1,因此它为按位 AND 运算的标识元素。因此,如果我们应用 x & 0xff 操作,它将为我们提供 x 的最低 8 位,如果数字 x 小于 255,结果与x是相同的,否则,它将是 x 的最低 8 位。

通常,& 0xff 操作为我们提供了一种从数字中提取最低 8 位的简单方法。实际上可以使用它来提取我们需要的任何8位,因为我们可以向右移动我们希望成为最低位的任何8位,然后,我们可以通过应用& 0xff操作来提取它们。

使用 & 0xff 提取 RGBA 颜色坐标

假设我们有一个整数 x,以 32 位存储,表示 RGBA 系统中的一种颜色,这意味着它的每个参数(R、G、B 和 A)有 8 位:

  • R = 16 (00010000 in binary)
  • G = 57  (00111001 in binary)
  • B = 168 (10101000 in binary)
  • A = 7 (00000111 in binary)

因此,二进制中的 x 将表示为 00010000 00111001 10101000 00000111——相当于十进制的 272214023。现在,我们有十进制的 x 值,我们想要提取每个参数的值。

正如我们所知,>> 操作将位右移。因此,当我们执行 (10000000 00000000 >> 8) 时,它返回 10000000。因此,我们可以提取每个参数的值:

int rgba = 272214023;

int r = rgba >> 24 & 0xff;
assertEquals(16, r);

int g = rgba >> 16 & 0xff;
assertEquals(57, g);

int b = rgba >> 8 & 0xff;
assertEquals(168, b);

int a = rgba & 0xff;
assertEquals(7, a);

结论

我们讨论了 & 0xff 操作如何有效地以仅保留最后 8 位中的值并忽略其余位的方式划分变量。正如我们所见,当我们将变量右移并需要提取移位后的位时,此操作特别有用。

标签:Java,字节,int,assertEquals,理解,rgba,0xff,我们
来源: https://www.cnblogs.com/CodePastry/p/14883937.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有