原码,反码,补码

   有时候在编程的时候,跟踪代码查错,明明传过来的-1,但结果显示的是
0xFFFF;其实这就是-1的补码。了解原码,反码,补码对自己编程还是有一定
帮助的,之前也只是模糊的了解一点,最近查了一些资料,记录下来,以免自己
忘记
   原码:因为我们看到的十进制数,存入计算机的时候,都会转化成二进制,
计算机只认识二进制码。比如:“3” -> 0x0000 0011;
   反码:原码为正数时,和原码一样。负数时,除了第一位符号位,其余位置取反


   补码:原码为正数时,和原码一样。负数时,等于反码+1,

公式:

 [+1] = [00000001]原 = [00000001]反 = [00000001]补

 [-1] = [10000001]原 = [11111110]反 = [11111111]补

   为什么要反码和补码呢?原码不就可以了解决问题了吗?
   比如:1 - 1 = 0;

   1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2

   为什么变成1 + (-1)呢? 因为计算机很笨,只认识+法,不认识减法;也不认识
乘除法,我们写程序能做加减乘除,都是转变成+来完成的。具体怎么转换,可以查

一些资料,主要是用到移位和各种操作符号的结合,最终转换为+运算。
  回归主题,很明显-2不是我们要的结果,对吧。

  用反码运算:
  1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0
   能得到我们要的结果,但是,结果为“-0”,0 是不分正负号的,这样做很明显

有会多占用一个位置;

   用补码运算:
   1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
   这样的结果,就不会带符号了,符合我们的要求;

   程序中使用二进制码,会提高我们的程序运行效率,以及减少空间。当然大多数

情况是体现不出这种效率的。但是了解之后用来调错还是不错的。
   网上有很多利用原码,补码,反码,来解决日常经常碰到的一些问题:效率都非

常高,而且也比较简洁;
   比如:交换2个数;
   a^=b;
   b^=a;
   a^=b;
   这样就实现了,a和b数字的交换。没有用到第三个变量,存数据。
   网上还有很多类似的技巧,有时间可以在网上查一下,对提升自己写程序会有很

大帮助的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值