赞
踩
把一个二进制数,符号位不变,其余位向左或向右移动。右移时,左侧空的数位就补符号位的数;左移时,右侧空的数位补0,溢出数位舍弃。
直接举例说明移位运算:分别举例一个正数和一个负数(为了演示方便使用8位机器码)
先定义两个十进制数值:a=5,b=-5;
十进制数值 | a = 5 | b = -5 |
---|---|---|
二进制原码 | 0000 0101 | 1000 0101 |
反码 | 0000 0101 | 1111 1010 |
补码 | 0000 0101 | 1111 1011 |
对a和b分别进行左移位运算(以移动2位为例)
(1)a<<2:将0000 0101
按左移位原理,得到结果为0001 0100
,为正数,转原码不变,转十进制为:20;
(2)b<<2:将1111 1011
按左移位原理,得到结果为1110 1100
,为负数。先转码1001 0011
,再+1得补码为1001 0100
,转十进制为:-20;
对a和b分别进行右移位运算(以移动2位为例)
(1)a>>2:将0000 0101
按右移位原理,得到结果为0000 0001
,为正数,转原码不变,转十进制为:1;
(2)b>>2:将1111 1011
按右移位原理,得到结果为1111 1110
,为负数。先转码1000 0001
,再+1得补码为1000 0010
,转十进制为:-2;
(1)正数的原码、反码和补码相等;负数的补码为原码取反后+1;
(2)关于补码:
取反加一,并不是补码的定义;补码,是一个“代替负数运算的”的正数。
借助于补码,减法,就可以用加法代替。利用补码,统一了加减法,目的是简化计算机的硬件。
关于为什么正数(补码)能够代替负数,可以用十进制来说明:
如果限定仅用 2 位 10 进制数,可以有:
24 - 1 = 23
24 + 99 = (一百) 23
仅仅保留 2 位数,就必须舍弃进位,此时,+99 就和-1 就是等效的:
+99,就称为-1 的补数;
+98,是-2 的补数;
......
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。