进制
- 进制也就是进位制,是人们规定的一种进位方法
- 对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位 - 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位
 
| 十进制 | 二进制 | 八进制 | 十六进制 | 
|---|---|---|---|
| 0 | 0 | 0 | 0 | 
| 1 | 1 | 1 | 1 | 
| 2 | 10 | 2 | 2 | 
| 3 | 11 | 3 | 3 | 
| 4 | 100 | 4 | 4 | 
| 5 | 101 | 5 | 5 | 
| 6 | 110 | 6 | 6 | 
| 7 | 111 | 7 | 7 | 
| 8 | 1000 | 10 | 8 | 
| 9 | 1001 | 11 | 9 | 
| 10 | 1010 | 12 | A | 
| 11 | 1011 | 13 | B | 
| 12 | 1100 | 14 | C | 
| 13 | 1101 | 15 | D | 
| 14 | 1110 | 16 | E | 
| 15 | 1111 | 17 | F | 
| 16 | 10000 | 20 | 10 | 
二进制
- 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数 - 它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”
 
- 当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的
- 十进制转化二进制的方法: - 用十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
  
 
- 用十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
八进制
-  八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1 - 一些编程语言中常常以数字0开始表明该数字是八进制
 
-  八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中 
-  八进制和二进制互转: 
  
-  十进制转化八进制的方法: - 用十进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
  
 
- 用十进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
十六进制
- 十六进制(英文名称:Hexadecimal),同我们日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写 - 与10进制的对应关系是:0-9对应0-9,A-F(或a-f)对应10-15
 
- 十六进制的数和二进制数可以按位对应(十六进制一位对应二进制四位),因此常应用在计算机语言中
- 十六进制和二进制互转: - 用十进制数除以16,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
  
 
- 用十进制数除以16,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
C语言如何表示相应进制数
| 进制 | 描述 | 
|---|---|
| 十进制 | 以正常数字1-9开头,如15 | 
| 八进制 | 以数字0开头,如017 | 
| 十六进制 | 以0x或0X开头,如0xf | 
| 二进制 | 以0b或0B开头,如0b1111 | 
示例代码:
#include <stdio.h>int main() {// 十进制方式赋值int a = 15;// 八进制方式赋值int b = 017;// 十六进制方式赋值int c = 0xf;// 二进制方式赋值int d = 0b1111;printf("%d, %d, %d, %d\n", a, b, c, d);return 0;
}
数值存储方式
原码
- 最高位做为符号位,0表示正,为1表示负
- 其它数值部分就是数值本身绝对值的二进制数
- 负数的原码是在其绝对值的基础上,最高位变为1
- 下面数值以1字节的大小描述
| 十进制数 | 原码 | 
|---|---|
| +15 | 0000 1111 | 
| -15 | 1000 1111 | 
| +0 | 0000 0000 | 
| -0 | 1000 0000 | 
- 原码存在减法运算问题及两个0问题
反码
- 对于正数,反码与原码相同
- 对于负数,符号位不变,其它部分取反(1变0,0变1)
- 下面数值以1字节的大小描述
| 十进制数 | 反码 | 
|---|---|
| +15 | 0000 1111 | 
| -15 | 1111 0000 | 
| +0 | 0000 0000 | 
| -0 | 1111 1111 | 
- 反码运算也不方便,通常用来作为求补码的中间过渡。
补码
- 在计算机系统中,数值一律用补码来存储
- 对于正数,原码、反码、补码相同
- 对于负数,其补码为它的反码加1 - 负数的补码符号位不动,其他位求反,最后整个数加1,得到原码
 
- 下面数值以1字节的大小描述
| 十进制数 | 补码 | 
|---|---|
| +15 | 0000 1111 | 
| -15 | 1111 0001 | 
| +0 | 0000 0000 | 
| -0 | 0000 0000 | 
移码
- 补码符号位取反就是移码,主要用来比较数的大小
- 下面数值以1字节的大小描述
| 十进制数 | 补码 | 
|---|---|
| +15 | 1000 1111 | 
| -15 | 0111 0001 | 
| +0 | 1000 0000 | 
| -0 | 1000 0000 |