我正在尝试编写一个使两个数字相加的代码,即使它们的长度为32位。但是,如果我添加两个32位数字,或者添加两个数字组成32位数字(例如2bi + 2bi),则程序将无法工作。在第一种情况下,我收到“无效的整数输入”错误,在第二种情况下,我得到了“算术溢出”错误。我认为第32位用于“ +”或“-”信号。我该如何解决?
li $v0, 4
la $a0, primeiro.num #asks for the first number
syscall
li $v0, 5
syscall
move $s0, $v0
li $v0, 4
la $a0, segundo.num #asks for the second number
syscall
li $v0, 5
syscall
move $s1, $v0
blt $s1, $zero, erro_num_neg
add $s2, $s0, $s1
答案 0 :(得分:0)
使用.ag-theme-material .ag-icon-checkbox-checked:empty {
$color: mat-color($accent);
background-image: icon(checkbox-checked, 'rgb(' + red($color) + ', ' + green($color) + ', ' + blue($color) + ')');
}
.ag-theme-material .ag-icon-checkbox-unchecked {
$color: mat-color($foreground, icon);
background-image: icon(checkbox-unchecked, 'rgb(' + red($color) + ', ' + green($color) + ', ' + blue($color) + ')', opacity($color));
}
/ addu
进行纯二进制添加。丢弃从最高位开始的进位,并且不检查2的补码有符号溢出,因此它可以像包装无符号或有符号加法一样工作。
如果您专门想要在签名溢出时引发异常,则应该只使用addiu
/ add
。 (例如,检测这种 是错误并且您希望程序中止而不是继续处理包装数据的情况。)
C编译器甚至不对有符号算术使用MIPS addi
。有符号溢出是C中未定义的行为,因此在某些情况下(当asm操作数具有C抽象机中存在的值,而不是重新排序之类的结果时),它们可以使用,但是大多数编译器选择不做。