热门

最新

红包

立Flag

投票

同城

我的

发布
young2415
supermouse_
4 年前
trueyoung2415

将有符号数作为无符号数来处理,是一种检验 0 ≤ x ≤ y 的低开销方法,常用于检查数组的下标是否越界。

下面这条指令的含义是,将 $s1 和 $t2 作为无符号数来处理,如果 $s1 < $t2,则将 $t0 的值置为 1,否则保持初始值 0 不变。

sltu $t0, $s1, $t2

($t0、$s1、$t2 分别代表 3 个不同的寄存器,在这里姑且把他们当做变量来看待)

因为 $t2 是数组的长度,所以一定是正整数,最高位是 0(因为是补码表示),如果 $s1 是负数,那么它的最高位一定是 1 (同样是因为补码),那么把 $s1 作为无符号数一定比 ​$t2 大,所以上述指令执行之后 $t0 为 0;如果 $s1 中存的是比 $t2 大的正整数,那上述指令的执行结果肯定也是 $t0 = 0。

所以使用无符号比较 x < y,只用一条指令,就可以实现在检查 x 是否小于 y 的同时,也检查 x 是否为一个负数。

CSDN App 扫码分享
分享
评论
点赞
打赏
  • 复制链接
  • 举报
下一条:
冬日海珠湖,美不胜收,一定要来走走
立即登录