Java 为什么我必须为位掩码声明一个长变量?

Java 为什么我必须为位掩码声明一个长变量?,java,bit-manipulation,Java,Bit Manipulation,下面是这个问题的两个有效解决方案,为什么我在第一个解决方案中将掩码变量设置为int(而不是long)时遇到整数溢出,为什么我能够在第二个解决方案中将掩码设置为int变量类型 public int find完成(int num){ //为了估计长度,复制一个数字,因为我们将开始变异它 //直接地 int输入=num; //使用二次方掩码在每个位置取1,并使用XOR分阶段翻转 对于(长遮罩=1;遮罩1; } 返回num; } 设置for循环中的条件的方式要求mask的值必须大于终止的input的值。

下面是这个问题的两个有效解决方案,为什么我在第一个解决方案中将
掩码
变量设置为int(而不是long)时遇到整数溢出,为什么我能够在第二个解决方案中将
掩码
设置为int变量类型

public int find完成(int num){
//为了估计长度,复制一个数字,因为我们将开始变异它
//直接地
int输入=num;
//使用二次方掩码在每个位置取1,并使用XOR分阶段翻转
对于(长遮罩=1;遮罩1;
}
返回num;
}

设置
for
循环中的条件的方式要求
mask
的值必须大于终止的
input
的值。但是,当您使用
Integer.MAX\u value
作为输入时,将没有其他
int
值大于
Integer.MAX\u值,其中两个uld停止
for
循环。因此您的
for
循环将永远运行,因为

for(/* */, mask <= Integer.MAX_VALUE, /* */) {
}
有关(/**/,请参阅