java - Python 和 Java 中的位操作

标签 java python python-3.x bit-manipulation bit-shift

我正在研究一个问题,其中给定的数组如下:

“给定一个非空的整数数组,每个元素都出现了三次,只有一个元素出现了一次。找到那个唯一的一个。”

例如:

Input: [2,2,3,2]
Output: 3

我正在尝试使用位操作来解决它,我在 Python 中的代码如下:

def singleNumber(self, nums):

    ans = 0
    for i in range(31):
        summ = 0
        for num in nums:
            dig = (num>>i)&1
            if dig:
                summ += 1
        summ = summ%3
        if summ:
            ans = ans | summ<<i

    return ans

我想要做的就是,获取数组中每个数字的最后一位并计算我得到的数字的数量,然后 %3 以获取剩余的确切 1 位并将其移位以得出正确答案.

这个失败的测试用例有负输入,比如:

[-2,-2,1,1,-3,1,-3,-3,-4,-2]
O/P: 2147483644
Expected O/P: -4

但是,当我用 Java 执行完全相同的操作时,它就成功了!代码如下:

class Solution {
public int singleNumber(int[] nums) {

    int ans = 0;
    int dig = 0;

    for(int i = 0; i <=31; i++){
        int sum = 0;
        for(int num: nums){

            dig = (num>>i)&1;
            if(dig!=0){
                sum = sum + 1;    
            }
            sum = sum%3;
        }
        if(sum!= 0){
            ans = ans | sum<<i;
        }

    }
    return(ans);
   }
}

导致这种差异的位在 Python 中是如何表示的? 有人可以告诉我 Python 和 Java 这两种语言在位操作方面的区别吗?

最佳答案

java 有 32 位固定的 int 大小。但是在 python 中没有明确定义的数字限制。阅读 ( Maximum value for long integer )

针对您的问题的一个 hacky 解决方案(可能不适用于所有情况)是

return ans - 2**(32-1)

关于java - Python 和 Java 中的位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50819025/

相关文章:

Python 3.5 无法导入模块

python - 更改图表图例颜色,构建自己的图表配色方案 - Openpyxl 2.4.9

java - java中查找数组中的重复值

python - 如何在为此参数指定 type=FileType(...) 时使用 argparse 获取文件名

python-3.x - Mac OS Catalina 全新安装时出现 pip3 和 Pipenv 问题

python - 使用 aptitude 安装包时的多个版本的 python

python - 广度优先搜索还是深度优先搜索?

java - 你能帮忙解决 Java 中的正则表达式问题吗?

Java 邮件。回复消息分为消息和附件

java - JDBC 未检测到存储过程异常