溢出判断
溢出判断:以下的"出错"就是溢出
(以下讨论的是算术右移或者算术左移的情况下溢出判断)
-
对于正数: 原码、补码、反码 不论左移还是右移都是丢1出错
-
对于负数:
- 原码和正数一样,左移或者右移丢1就出错
- 反码,左移或者右移丢0就出错
- 补码,左移丢0出错,右移丢1出错
个人判断方法:先判断正负,正数就按正的来,丢1出错,如果是负数再判断是原码还是补码或者是反码,
如果是原码左移右移都是丢1溢出,反码左移右移都是丢0溢出,补码是左移丢0溢出,右移丢1溢出。
画一张图来方便记忆
练练手:
(解析,看[x1]原,先判断正负,[x1]原以0开头是正数,左移一位丢0,未溢出。
看[y3]补,以1开头为负数,又是补码,补码右移丢1为溢出,这里显然溢出,其它的都是类似)