汇编中算术左移和逻辑左移为什么一样? 想通了 记录一下

今天看汇编的shl和sal命令一样 很是不解 经过验证得到结果 防止以后忘记 记录一下!!!

逻辑左移 和 算术左移在操作上是一样的 难道就不分有符号和无符号了?? 当然不是 其实是这样的 举个例子

0111 如果是无符号逻辑左移不用说 了 就是把二进制左移就哦了

0111 如果是有符号的话,左移代表乘以2 然后这个现在是7 乘2 就是1110 也就是14了

那么负数呢??

1001 这个是-7的补码 然后左移一位 按照规则变成 0010 这怎么不是乘以二了呢?? 因为溢出了 我们扩展一下

11111001 扩展负数的话 前四位都是1 这是扩展的-7

左移:

11110010 反码 10001101 加一得到补码10001110 哈哈 得到了-14的原码 (补码的补码是源码) 就这么简单!