关于MIPS32逻辑左移sll、算术右移sra十六进制运算的疑问
MIPS32移位运算题目解析
核心运算规则
- 逻辑左移(
sll):无符号移位,将二进制位整体左移指定位数,右侧空出位补0,左侧移出的位直接丢弃,运算等价于无符号数乘以2的n次方(n为移位位数) - 算术右移(
sra):有符号移位,将二进制位整体右移指定位数,左侧空出位补原数的最高位(符号位,正数补0、负数补1),右侧移出的位直接丢弃,运算等价于有符号数除以2的n次方(n为移位位数)
第一条指令sll $t2, $t1, 3运算过程
已知初始值$t1 = 0x77777777,32位二进制展开为:
0111 0111 0111 0111 0111 0111 0111 0111
最高位(第31位)为0,属于无符号正数
左移3位后,左侧最高3位丢弃,右侧补3个0,得到新的32位二进制:
1011 1011 1011 1011 1011 1011 1011 1000
转换为十六进制结果为0xBBBBBBB8,和你观察到的现象一致:原每一位十六进制7(对应二进制0111)移位后变为B(对应二进制1011),最低位补8(对应二进制1000)。
第二条指令sra $t2, $t0, 2运算过程
已知初始值$t0 = 0x88888888,32位二进制展开为:
1000 1000 1000 1000 1000 1000 1000 1000
最高位(第31位)为1,属于有符号负数
算术右移2位时,左侧补2个符号位1,右侧最低2位丢弃,得到新的32位二进制:
1110 0010 0010 0010 0010 0010 0010 0010
转换为十六进制结果为0xE2222222,和你观察到的现象一致:最高位变为E(对应二进制1110),其余位均为2。
内容的提问来源于stack exchange,提问作者user16951674
相关产品推荐
相关产品推荐

