C语言——常见进制转换及原码、反码、补码

1、常见进制及其转换

       在日常工作生活中,我们经常能听到二进制、八进制、十进制和十六进制,这些讲法是什么意思?其实这些进制只是数值的不同表现形式而已。

        比如:数值15的各种进制的表示形式:

        15的二进制:1111

        15的八进制:17

        15的十进制:15

        15的十六进制:F

1.1、二进制和进制转换

        ★二进制就是满2进1

        ★二进制数字只有0和1

1.1.1、二进制转十进制

        先看十进制的1234的值是一千二百三十四,为什么是这个值?其实十进制每一位都有权重。如下表:

十进制位千位百位十位个位
权重10^310^210^110^0
权重值1000100101
求值1*1000+2*100+3*10+4*1=1234

        类似可以得知二进制中也存在权重,比如二进制数:1111

二进制位1111
权重2^32^22^12^0
权重值8421
求值1*8+1*4+1*2+1*1=15

1.1.2、二进制转换八进制和十六进制

        ① 二进制转八进制

        八进制数字是0~7组成,3个二进制位组成1个八进制位。比如八进制数7可转换为二进制数111。二进制01101011,转换八进制数:0153,0开头的数字在C语言中表示八进制数。因八进制数在单片机编程中不常用,故不多赘述。

        ② 二进制转十六进制

        十六进制数字是0~9,A~F组成,4个二进制位组成1个十六进制位。比如十六进制数F可转换为二进制数1111。二进制01101011,转换十六进制数:0X6B,0X开头的数字在C语言中表示十六进制数。十六进制数在单片机编程中较为常见。

二进制数01101011
十六进制数6B

2、原码、反码和补码

        整数的二进制表示方法有三种,即:原码反码补码。 

        对于有符号整数,三种表示方法均包含符号位数值位两部分,最高位为符号位,其余为数值位。在符号位中,“0”表示“正数”,“1”表示“负数”。

        对于无符号整数,所有位都是数值位。

         ★正整数的原码、反码和补码都是其本身。

         ★负整数的原码是直接按照正负数形式转换二进制;反码就是原码中符号位不变,其他按位取反;补码就是反码+1。

        例如:

        原码:1000 0001

        反码:1111 1110

        补码:1111 1111

        对于整型,数据存放在内存中为补码。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值