检查数组下标是否越界的低开销办法

将有符号数作为无符号数来处理,是一种检验 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 是否为一个负数。#笔试题目#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:23
转人工😡
门口唉提是地铁杀:五次握手了
点赞 评论 收藏
分享
Lorn的意义:1.你这根本就不会写简历呀,了解太少了 2.你这些项目经历感觉真的没啥亮点啊,描述的不行,重写书写一下让人看到核心,就继续海投 注意七八月份ofer还是比较多的,越往后机会越少,抓住时机,抓紧检查疏漏,加油查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务