假设我有两个无符号字节 b
和 x
。我需要计算 bsub
作为 b - x
和 badd
作为 b + x
。但是,我不希望在这些操作期间发生下溢/溢出。例如(伪代码) :
b = 3; x = 5;
bsub = b - x; // bsub must be 0, not 254
还有
b = 250; x = 10;
badd = b + x; // badd must be 255, not 4
显而易见的方法包括分支:
bsub = b - min(b, x);
badd = b + min(255 - b, x);
我只是想知道是否有更好的方法来做到这一点,也就是通过一些粗糙的比特操作?