Java 如果值不合适,则设置字节
如果我尝试分配的值更大,我想将一个字节设置为max或min value。有没有更好的方法,而不是用if语句检查呢 例如: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
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中)。