1

我试图在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;
}

但是,这会出现问题——当 byte1 是 0x7F,而 byte2 不是 0x00 时,我的模减法代码不会返回 0x7F——而是返回 0x80。

我可以确定这个案子,但我不知道如何解决它。

4

1 回答 1

3

您可以将该函数替换为 byte1 + byte2。整数加法,无论整数大小如何,都会通过设计产生“模块化”溢出。不需要所有的铸造。

您发现错误的原因在这一行:

    outNum-=255;

那应该是256

于 2013-04-04T03:44:44.050 回答