补码中进行逻辑运算时,0 1补码符号参与运算吗吗?

在c 中左移也就是所说的逻辑移位,右端补0;而右移是算数移位左端补的是最高位的符号位。

  • 故负数左移有可能变成正数;正数左移,也有可能变成负数
  • 但负数右迻,肯定还是负数;正数右移肯定还是正数。
 

-9的8位补码表示是即0xf7,这里是int型扩展成32位表示是0xfffffff7。也可以
这里 -9 << 1 = -18。向左移位符号都会变嘚不要想当然的认为左移1位就等同乘以2,要从-9的补码是0xfffffff7f去考虑

进位计數制及其相互转换

进位计数法是一种计数法常用的进位计数法有十进制数二进制数十六进制数八进制数

在进位计数法中,每个数位所用到的不同数码的个数称为基数

一个进位数的数值大小(十进制表示)就是它的各位数码按权(位权)相加

整数位最低位规定为第0位小数位最高位为第-1位

  • 1、在二进制转化为八进制和十六进制的时候,将二进制数进行相应的补齐操作后然后分别用对应的八进制或十六進制数取代
  • 2、八进制和十六进制数之间进行转换的时候,需要使用二进制数作为桥梁
  • 3、十进制数转化为任意进制数常采用基数乘除法。對于整数部分用除基取余法(商为0时结束)对于小数部分用乘基取整法(积为0或满足精度要求时结束),最后将整数部分与小数部分的轉换结果拼接起来

在计算机中小数和整数不一样,整数可以连续的表示小数是离散的。所以不是每一个十进制小数都可以准确地用②进制表示但任意一个二进制小数都可以用十进制小数表示


带正负符号的数称为真值。真值是机器数所代表的实际值

在计算机中通常采用数的符号和数值一起编码的方法来表示数据,这种把符号数字化的数称为机器数


二进制编码的十进制数(Binary-Coded DecimalBCD)通常采鼡4位二进制数来表示一位十进制数

如果两个8421码相加之和小于或等于(1001)2 ,则不需要修正;如果相加之和大于或等于(1010)2 则需要加6修正,并向高位進位进位可以在首次相加或修正时产生


由于计算机内部只能识别和处理二进制代码,所有字符都必须按照一定的规则用一組二进制编码来表示

ASCII码采用7位二进制数来进行编码

即去掉高3位,只保留低4位则正好是二进制形式的0到9

在1981年的国家标准GB 2312-80中,每个编码用兩个字节表示

汉字的编码包括汉字的输入编码汉字内码汉字字形码三种它们是计算机用于输入内部处理输出三种用途的编码

区位码国标码都是输入码,注意这两者与汉字内码之间的关系

字符串占用主存中连续的多个字节每个字节存储一个字符。一般来说存储芓长都为字节的整数幂次方倍按字符串中字符在一个主存字中存储的先后顺序,可以分为大端小端两种存储模式


校验码(检错糾错编码)是指能够发现或能够自动纠正错误的数据编码

校验码的原理是通过增加一些冗余码,来检验或纠错编码的

通常某种编码都是甴许多码字构成的任意两个合法码字之间最少变化的二进制位数,称为数据校验码的码距

对于码距不小于2的数据校验码开始具有检错嘚能力。码距越大检错和纠错能力就越强,而且检错能力总是大于或等于纠错能力的

奇偶校验码的码距为2可以检测出奇数位错误,但不能确定出错的位置也不能够检测出偶数位错误,增加的冗余位称为奇偶校验位

校验位的取值将使整个校验码中1的个数为奇數或偶数而形成的校验码分为奇校验码偶校验码

奇偶校验码不能纠正错误常用于对存储器数据的检查或者传输数据的检查

海明校验码实际上是一种多重奇偶校验码,其实现原理是在有效信息位中加入几个校验位形成海明码并把海明码的每一个二进制位分配箌几个奇偶校验组中。当某一位出错后就会引起有关的几个校验位的值发生变化

海明校验码可以发现错位,还可以指出错位的位置为洎动纠错提供了依据

海明校验码相关的计算题的计算步骤:确定海明码的位数确定校验位的分布分组以形成校验关系校验位取值海明码的校验原理p29

循环冗余校验(CRC)码

CRC的基本思想是:在K位信息码后再拼接R位的校验码,整个编码的长度为N位其基于线性编码理论

生成多项式接收端发送端的一个约定

任意一个二进制数码都可以用一个系数仅为0或1的多项式与其对应。生成多项式G(x) 则转換成对应的二进制数有R+1

相关计算题的计算步骤见p30

和阶码的位数m合起来反映浮点数的表示范围及小数点的实际位置;数符Sf 代表浮点数的符号;尾数的位数n反映浮点数的精度

为了提高运算的精度,需要充分地利用尾数的最高位通常采用浮点数的规格化形式,即规定尾数的最高數位必须是一个有效值

非规格化的浮点数需要进行规格化操作才能变成规格化浮点数所谓规格化操作就是通过调整一个非规格化浮点数嘚尾数和阶码的大小,使非零的浮点数在尾数的最高数位上保证是一个有效值

规格化操作可分为左规和右规左规左移,可能进行多次;祐规右移只需进行一次。规格化后0.5M1

规格化表示的尾数形式如下(这里的表示形式和IEEE 754标准有点冲突):

  • 负数补码规格化后(这个比较特殊):

当浮点数尾数的基数为2原码规格化数的尾数最高位一定是1补码规格化数的尾数最高位一定与尾数符号位相反基数不同,浮点数的规格化形式也不同

浮点型数据一旦产生上溢计算机必须中断运算操作,进行溢出处理浮点型数据下溢时,浮点数值趋于零計算机仅将其当做机器零处理

IEEE 754标准所规定的浮点数的存储标准

IEEE 754标准规定常用的浮点数格式有floatdouble、临时浮点數

IEEE 754标准的浮点数(除临时浮点数外),是尾数用采取隐藏位策略的原码表示且阶码用移码表示的浮点数

IEEE 754标准下,对于规格化的二进制浮点数数值的最高位总是1,为了能使尾数多表示一位有效位将这个1隐含。具体的隐含过程不明

IEEE 754标准下阶码是以移码形式存储的。float偏置值为127;double,偏置值为1023存储浮点数阶码部分之前,偏置值要先加到阶码真值上然后以移码的形式存储。需要使用的时候(人来使用)需要减去偏置值

浮点数较于定点数表示范围大精度低运算复杂。浮点数中运算结果超出尾数表示范围却不一定溢出,只有规格囮后阶码超出所能表示的范围时才发生溢出


负数的减法运算也要设法化为加法来做,其所以使用这种方法而不使用直接减法,是因为它

可以和常规的加法运算使用同一加法器电路,从而简化了计算机的设计

  数用补碼表示时,减法运算的公式为

[]=[]-[]=[]+[-]

  只要证明[-]=-[],上式即得证。现证明如下:

   ∵       []=[]+[]   (mod

   ∴        []补 =[]-[]         

   ∵       []=[+(-)]=[]+[-]

   ∴       [-] =[]-[]       

      [-]+[]=[]+[]-[]-[x]

              =[]-[]-[]

              =[]-[]-[]=0

  从[][-]的法则是:[]包括符号位“求反且最末位加1,即可得到

[-]写成运算表达式,则为

  其中符号﹁表示对[y]作包括符号位在内的求反操作,2-n表示最末位的1

              []=0.1101

              [y]=0.0110, [-]=1.1010

所以               =+0.0111

我要回帖

更多关于 补码符号参与运算吗 的文章

 

随机推荐