我试图用Java中的两个字节执行模加法,结果得到第三个字节。

这是我正在使用的代码:

public static byte modAdd(byte byte1,byte byte2){
    int int1 = ((int)byte1)+128;
    int int2 = ((int)byte2)+128;
    int outNum = int1+int2;
    if(outNum>255){
        outNum-=255;
    }
    outNum-=128;
    return (byte)outNum;
}


但是,这有问题的情况-当字节1为0x7F,而字节2为0x00以外的任何值时,我的模减码不返回0x7F-而是返回0x80。

我可以确定情况,但不知道如何解决。

最佳答案

您可以仅用byte1 + byte2替换该函数。整数加法运算,无论整数大小如何,在设计上都会产生“模块化”溢出。不需要所有的转换。

您发现的错误原因在此行中:

    outNum-=255;


那应该是256

09-11 18:09