Java.math.BigInteger.and() 是如何工作的?

How does Java.math.BigInteger.and() work?

根据 this tutorial,当调用 .and() 的值为 6 和 3 时,Java.math.BigInteger.and() 的结果是 2。这是如何工作的?它既不是连接也不是添加。

Logical bitwise And operation

6 = 110b(b表示二进制)
3 = 011b

110b & 011b = 010b = 2

它是按位 operation.In 你给出的问题 link 表明,

110 & 011 = 010
110 is the binary value of 6.
011 is the binary value of 3.

结果0102(decimal)的二进制。

它执行 &(按位与)。这意味着它 returns 二进制表示中匹配的 1。 例如,6 是 0110,3 是 0011 所以: 6 & 3 是 0110 & 0011 = 0010 = 2

java 中的 BigInteger 与原始类型 int 相同,long.All 您对数字原始类型执行的按位运算与 and()、or()、xor() 方法相同BigInteger.BigInteger 就像无限整数一样,没有固定的内存 (例如 int 是 4 个字节 最小值为 - 2,147,483,648.(-2^31) 最大值为 2,147,483,647(含).(2^31 -1))。您的 BigInteger 在内部存储为

最终整数[] mag;

对于and()方法 如果您的 BigInteger 值大于 int 类型,它将添加到 array.Bitwise 操作在两个输入的整数数组之间完成,例如您有两个大整数 x 和 y

它会这样计算 x.mag[0] & y.mag[0] x.mag[1] & y.mag[1] . . 将每个返回的所有值相加并求和,最终得到 value.Finally 与按位运算相同 &,|;

AND Truth table 跟随 2 个输入

所以对于两个整数 3 和 4

3 = 011b
4 = 100b

b 表示以 2 为基数。

3&4 = 011&100.

的和运算

所以对我们得到的每个位位置应用 AND truth table

1&0 = 0

1&0 = 0

0&1 = 1

实际上,我正在为两个数字应用和操作 LSB 到 MSB。

现引入Biginteger class用于计算不适合原始数据类型的大数long int

BigInteger 将执行相同的操作,但对于太大的数字。