1、常见进制及其转换
在日常工作生活中,我们经常能听到二进制、八进制、十进制和十六进制,这些讲法是什么意思?其实这些进制只是数值的不同表现形式而已。
比如:数值15的各种进制的表示形式:
15的二进制:1111
15的八进制:17
15的十进制:15
15的十六进制:F
1.1、二进制和进制转换
★二进制就是满2进1
★二进制数字只有0和1
1.1.1、二进制转十进制
先看十进制的1234的值是一千二百三十四,为什么是这个值?其实十进制每一位都有权重。如下表:
十进制位 | 千位 | 百位 | 十位 | 个位 |
权重 | 10^3 | 10^2 | 10^1 | 10^0 |
权重值 | 1000 | 100 | 10 | 1 |
求值 | 1*1000+2*100+3*10+4*1=1234 |
类似可以得知二进制中也存在权重,比如二进制数:1111
二进制位 | 1 | 1 | 1 | 1 |
权重 | 2^3 | 2^2 | 2^1 | 2^0 |
权重值 | 8 | 4 | 2 | 1 |
求值 | 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语言中表示十六进制数。十六进制数在单片机编程中较为常见。
二进制数 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
十六进制数 | 6 | B |
2、原码、反码和补码
整数的二进制表示方法有三种,即:原码、反码和补码。
对于有符号整数,三种表示方法均包含符号位和数值位两部分,最高位为符号位,其余为数值位。在符号位中,“0”表示“正数”,“1”表示“负数”。
对于无符号整数,所有位都是数值位。
★正整数的原码、反码和补码都是其本身。
★负整数的原码是直接按照正负数形式转换二进制;反码就是原码中符号位不变,其他按位取反;补码就是反码+1。
例如:
原码:1000 0001
反码:1111 1110
补码:1111 1111
对于整型,数据存放在内存中为补码。