首页 > 编程知识 正文

补码算术左移一位,补码左移右移规则

时间:2023-05-03 13:34:29 阅读:119340 作者:3458

运行算法时,输入的整数默认显示为计算机系统中的有符号整数。 如果有符号整数的算术移位,则根据补数的移位规则进行移位。 在有符号整数进行比特运算“左移()”的情况下,规则为“符号比特不变更,移位废弃,空出0”。 在有符号整数进行比特运算“右移位()”的情况下,规则为“不变更编码比特,丢弃移位,使比特互补编码比特为空”。

在有符号整数的二进制表示中,最高有效比特为已编码比特(正整数编码比特为0,负整数编码比特为1 )也来自有符号整数名称。

有符号正数移位规则:

1 .原码无论是向左移动还是向右移动,编码位都不变,舍弃移位,空出0

2 .反符号,无论是向左移动还是向右移动,编码比特都不变。 移动并丢弃位,空出位互补0

3 .补码,无论是左移还是右移,编码比特不变。 放弃位移,空出0

带符号负数移位规则:

1 .原码无论是向左移动还是向右移动,编码位都不变,舍弃移位,空出0

2 .反符号,无论是向左移动还是向右移动,编码比特都不变。 移动并丢弃位,空出位补1

3 )如果移动到补充数,则已编码比特未被改变且移动比特被丢弃,空闲比特补充0; 在右移位的情况下,编码比特不变,移位被废弃,空闲比特补充1

向左移动的特殊情况:

左移的一个特殊情况是,如果左移的位数超过该数值类型的最大位数,编译器就会用左移的位数删除该类型的最大位数,并用馀数进行移位。 例如:

int i=1; //int为32位

i=i33; //332=1,左移1位,I变为2

原码、反码、补码:

正数的反码等于其原码

正补数等于其原始代码

负数的反码等于反转了负数的除原始已编码比特之外的每个比特(0变为1,1变为0 ) )。

负数的补数与负数的反转数加1相同。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。