注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樊芳芳 廊坊师范学院信息技术提高班十四期

 
 
 

日志

 
 

原码、补码与位运算  

2016-12-25 13:48:25|  分类: 笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、原码和补码

原码:(在计算机中,数的正负号是用01表示)原码表示法在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数,其余位表示数值的大小。

例如,我们用8位二进制表示一个数,+11的原码为00001011, -11的原码为10001011

原码不能直接参加运算,可能会出错。 例如数学上,1+(-1)=0,而在二进制中原码  00000001+10000001=10000010,换算成十进制为130

补码:(负数再计算机中的表示形式)计算时加上正数,是不需要进行求取补数的;只有进行减法(或者加上负数),才需要对减数求补数。

1正数的补码与原码相同 例如,+9的补码是00001001

2负数的补码:先取反(符号位除外),再+1 例如,-7的补码:因为是负数,则符号位为“1,整个为10000111,再取反:变为11111001

负数原码变为补码:符号位不变,其余位取反再加1。如:原码为 10101101取反后为11010010,再加1就变为补码11010011

负数补码变原码:先-1,符号位不变,其余位取反。

10001的补码是取反后在再加1,也就是11110+1=11111;

如果是11111变回原码呢?我们可以采取逆过程先减1,11111-1=11110,再取反变为10001;

二、位运算(按二进制进行的运算)

1& 按位与 :如果两个相应的二进制位都为1,则该位的结果值为1,否则为0

5    &   3 按位与同为1时取1,否则取0

(101)B ——>5

(011)B ——>3

(001)B ——>1(结果)

2| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1

      5  |  3

101——>5

011——>3

111——>7(结果)

3^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1

5^3

      101——>5

      011——>3

      110——>6(结果)

4~ 取反 ~是一元运算符,用来对一个二进制数每一位取反,0变1,1变0。

     例如:

  ~9的计算步骤:

转二进制:0 1001——>9

计算补码0 1001(正数的补码与原码相同)

按位取反:1 0110(这里是一个负数,负数在计算机里要用其补码来表示:补码=符号位以后按位取反再加1)

转为原码

按位取反:1 1001  

末位加一:1 1010

符号位为1是负数,即-10


~-9的计算步骤:

转二进制:1 1001

计算补码:1 0111

按位取反:0 1000

_____

转为原码:

正数的补码和原码相同,仍为:0 1000,即8

直接计算方法:~a=-(a+1)

5<< 左移 :用来将一个数的各二进制位全部左移N位,右补0

       2左移两位的到8

(10->100->1000)B最终结果为(1000)B=2^3=8

6>> 右移: 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,                 高位补0

11右移1位得到5

11=2^3+2^1+2^0=(1011)B

右移1(101)B=5

 

  评论这张
 
阅读(42)| 评论(27)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017