指定区间整数的上溢出和下溢出

场景:
要使一个整数变量始终保持在一个区间内,如:a 始终在 区间 [x,y]之间。若是 a 在操作中 出现溢出,
如上溢出 为 y+1 ,要使其变成 x, 下溢出 为 x-1, 要使其变成 y。

解法:
上溢出:
a(now) = ( a (befor) - x )% ( y - x + 1 )+ x ;

说说 ( a - x )的含义, 算出 与区间 最小值 的 差值 z( 区间 [x,a)数值的数量 ) , 取余 区间( [x,y] )数值 的数量 ( y - x + 1 ) 在加上 区间的最小值,即为 上溢出后数的所处的值。
例如 区间为 [ 27,48 ] ,a 分别为 28(未溢出代表) ,49(溢出代表)。
28 :( 28 - 27 ) % ( 48 - 27 + 1 ) + 27 = 28;
49 :( 49 - 27 ) % ( 48 - 27 + 1 ) + 27 = 27;
结果正确。
下溢出:
a(now) = y - ( ( y - a (befor) ) % ( y - x + 1) );
道理同上,此时计算 区间 的差值 需以 ( y(区间最大值) )来计算,在进行 对区间( [x,y] )数值 的数量 ( y - x + 1 )的取余。之后再用区间最大值对余数 进行减操作,可得到 下溢出后数的所处的值。
例如 区间为 [ 27,48 ] ,a 分别为 28(未溢出代表) ,26(溢出代表)。
48 : 48 - ( ( 48 - 28 )% ( 48 - 27 + 1 ))= 28;
26 : 48 - ( ( 48 - 26 )% ( 48 - 27 + 1 ))= 48;
结果正确。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值