在Java中的整数的最大值为2147483647,因为Java的整数签署了吧?

0xff000000具有4278190080的数值。

然而,我看到的Java代码是这样的:

int ALPHA_MASK = 0xff000000;

谁能赐教吗?

有帮助吗?

解决方案

在高位是符号位。设置它表示一个负数:-16777216。

Java的,最喜欢的语言,门店签订 2的补形式的数字。在这种情况下,减去2 31 ,或从2147483648 0x7F000000,或2130706432,收率-16777216。

其他提示

只是一个除了埃里克森的回答是:

正如他所说的,符号的整数存储为二进制补各自正值大多数的计算机体系结构。

也就是说,整个2 ^ 32个可能的值被分成两组:一个用于以0开始位正值和一个用于开始用1负值

现在,想象一下,我们正在限制为3位数字。让我们安排他们在一个有趣的方式将是有意义的第二个:

     000
  111   001 
110       010
  101   011  
     100  

您看到在左侧的所有数字与1位开始,而在右边,他们开始了0。我们先前的决定,宣布前者为负,而后者为阳性,我们看到,001,010和011是唯一的可能的正数,而111,110和101各自的负对应物。

现在我们做什么用两个数字都分别在顶部和底部? 000应该是零,显然,100将是所有的最低负数不具备积极的对应。总结:

     000      (0)
  111   001   (-1 / 1)
110       010 (-2 / 2)
  101   011   (-3 / 3)
     100      (-4)

您可能会注意到,您可以通过否定1(001),并加入1(001)得到它的-1(111)的位模式: 001(= 1) - > 110 + 001 - > 111(= -1)

现在回到你的问题:

0xff000000 = 1111 1111 0000 0000 0000 0000 0000 0000

我们不必进一步增加零点在它的前面,我们已经达到了最高的32位。 此外,它显然是一个负数(因为它开始的1位),所以我们现在要计算其绝对值/正对应:

这意味着,我们将采取的补

1111 1111 0000 0000 0000 0000 0000 0000

这是

0000 0000 1111 1111 1111 1111 1111 1111

然后,我们添加

0000 0000 0000 0000 0000 0000 0000 0001

和获得

0000 0001 0000 0000 0000 0000 0000 0000 = 16777216

因此,0xff000000 = -16777216。

东西可能值得指出的 - 该代码不意味着被用作与数值的整数;其目的是作为一个位掩码来过滤alpha通道出一个32位颜色值的。此变量确实甚至不应该被认为是一个数,就像用高8位二进制掩码接通。

额外位为符号

的Java int为二进制补码

整数在Java中签名。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top