12位整数乘法后移位问题咨询:带符号与无符号场景差异
12位整数相乘后的移位问题解析
带符号整数场景
两个12位带符号补码整数相乘后,会得到24位补码结果。这个24位结果里存在冗余的符号位:最高位(第23位)是结果的真正符号位,紧邻它的第22位会和符号位保持一致(补码乘法的符号扩展特性导致高12位都是符号位的复制)。
你需要的12位正确结果,其实是24位结果里的高12位(从第12位到第23位)。把24位结果右移11位,正好能将这部分移动到12位的位宽范围内;如果右移12位,会把真正的符号位也丢弃一位,自然得到错误结果。你的猜测是对的——确实是因为相乘后出现了冗余的最左侧符号位,只需要丢弃右侧11位即可。
无符号整数场景
如果是两个12位无符号整数,相乘得到的24位结果不存在符号扩展的冗余位。要缩回到12位无符号数,直接取24位结果的高12位即可,也就是对24位结果右移12位,这样就能得到正确的12位无符号结果。
内容的提问来源于stack exchange,提问作者Linda
相关产品推荐
相关产品推荐

