我注意到,unsigned int和int共享了相同的加法和减法指令.但是为整数除法和mutiply提供idivl/imull,为unsigned int提供divl/mull.我可以知道这个的根本原因吗?
Die*_*Epp 10
乘法或除法时的结果会有所不同,具体取决于您的参数是有符号还是无符号.
它实际上是两个补码的神奇之处,它允许我们对有符号和无符号加法和减法使用相同的操作.在其他表示中不是这样 - 补语和符号幅度都使用与无符号算法不同的加法和减法算法.
例如,对于32位字,-1由...表示0xffffffff.平方,您可以获得有符号和无符号版本的不同结果:
Signed: -1 * -1 = 1 = 0x00000000 00000001
Unsigned: 0xffffffff * 0xffffffff = 0xfffffffe 00000001
Run Code Online (Sandbox Code Playgroud)
请注意,结果的低位字是相同的.在没有给出高位的处理器上,只需要一个乘法指令.在PPC上,有三个乘法指令 - 一个用于低位,两个用于高位,具体取决于操作数是有符号还是无符号.