Java 如果值不合适,则设置字节

Java 如果值不合适,则设置字节,java,bit-manipulation,Java,Bit Manipulation,如果我尝试分配的值更大,我想将一个字节设置为max或min value。有没有更好的方法,而不是用if语句检查呢 例如: int[] arr = new int[128]; // assume int array is filled with random values byte[] arr2 = new byte[128]; for (int i = 0; i < arr.length; i++) { if (arr[i] > 127) { arr2[i] = 12

如果我尝试分配的值更大,我想将一个字节设置为max或min value。有没有更好的方法,而不是用if语句检查呢

例如:

int[] arr = new int[128]; // assume int array is filled with random values
byte[] arr2 = new byte[128]; 

for (int i = 0; i < arr.length; i++) {
  if (arr[i] > 127) {
    arr2[i] = 127;
  } else if (arr[i] < -128) {
    arr2[i] = -128;
  } else {
    arr2[i] = arr[i];
  }
}
int[]arr=newint[128];//假设int数组中填充了随机值
字节[]arr2=新字节[128];
对于(int i=0;i127){
arr2[i]=127;
}否则如果(arr[i]<-128){
arr2[i]=-128;
}否则{
arr2[i]=arr[i];
}
}
有没有办法用按位操作替换if/else语句?
或者有更聪明/更快的方法吗?

您可以链接
Math.min(int,int)
Math.max(int,int)
调用。像

arr2[i] = (byte) Math.min(127, Math.max(-128, arr[i]));

如果
arr[i]
小于
-128
,则需要
-128
。如果结果大于
127
,则需要
127
。这应该涵盖您的所有情况。

我很好奇,与原始手动分支相比,编译器将如何优化该链接(也是分支)。@Matthieu我将其绑定,对于100000个元素数组,它们大致相同。对于较大的阵列,数学运算变得更快。对于小型数组,1000个元素if/else的速度是纳秒级的两倍。通常,在Java应用程序中编写快速代码的方法是编写哑代码——代码简单明了,遵循最明显的面向对象原则。-@Elliott我希望他们能在学校里教授这一点:特别是因为“哑代码”更容易让编译器优化为高效代码(不仅仅是在Java btw中)。