郝斌的C语言基础 168 补码 上

原码

也叫 符号-绝对值码

最高位0表示正,1表示负,其余二进制位是该数字的绝对值的二进制位.如-5的原码为10101

原码简单易懂,但加减运算复杂,存在加减乘除四种运算,增加了cpu的复杂度,零的表示不唯一

反码

反码运算不便,也没有在计算机中应用

移码

移码表示数值平移n位,n称为移码量,主要用于浮点数的阶码的存储

补码

十进制求二进制

正整数转二进制

除2取余,直至商为零,余数倒叙排序

负整数求二进制

先求与该负数相对应的正整数的二进制代码,然后将所有位取反,末位加1,不够位数时,左边补1

如-3在32位系统中 → 11 →00 →01 → 左边补30个1 → 得1......01

零求二进制

全是零

二进制求十进制

如果首位是0,则表明是正整数,按普通方法来求

如果首位是1,则表明是负整数

将所有位取反,末位加1,所得数字就是该负数的绝对值

#include<stdio.h>

int main(void)
{
    int i = -3; // → 正整数11 → 取反00 →加一 01 →补一 1... 01    0XFFFFFFFD
    int j = -1; //  →正整数 1 →取反 0 →加一 1 →补一1... 1  0xFFFFFFFF
    int k = -100;//→正整数 1100100 →取反 0011011 →加一 0011100 →补一1....0011100  0XFFFFFF9C
    int l = 0xFFFFFFCA; //→ 0X35 → 0X36 → 54 得出l是-54

    printf("i = %#X %d\n",i,sizeof(int));
    printf("j = %#X     k = %#X\n",j,k);

    printf("二进制求十进制\n");
    printf("l = %d",l);
    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值