C语言基础学习(五)——进制
进位制
二进制数、位、字节与字
我们习惯于十进制的数:10,12等
一个二进制代表1位 一个位只能表示0或者1两种状态,简称bit
一个字节为8个二进制,称为8bit 位,简称BYTE 计算机存储的最小单位是字节
// 打开某个文件 看属性 文件大小 都是以B为单位1KB(千字节) = 1024B(字节)
1MB(兆字节) = 1024KB
1GB(吉字节) = 1024MB
1TB(太字节) = 1024GB
其中,B 是 Byte(字节)的缩写,是计算机文件大小的基本计算单位。一个字节通常由 8 位(bit)组成,每位是一个二进制数(0 或 1)。
例如,一个字符通常占用 1 个字节,如果是汉字,则占用 2 个字节。KB 常用来表示相对较小的文件或数据量,MB 则用于表示较大一些的文件,如文档、图片等,GB 常用于描述较大的文件集合,如大型软件安装包、电影等,而 TB 则通常用于表示非常大的存储容量,如服务器的硬盘容量等
1、进制表
C语言没有二进制常量的写法。
十进制: 逢十进一。 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
二进制: 逢二进一。 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 10000
八进制: 逢八进一。 00 01 02 03 04 05 06 07 010 011 012 013 014 015 016 017 020
十六进制:逢十六进一。 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f 0x20
//十六进制 从10用a表示 11 是b 以此类推
//十六进制 字母不分大小写在代码中使用八进制和十六进制的常量需要使用前缀:
八进制,前缀为0 072 010
十六进制,前缀为 0x 0x82十进制格式: %d
八进制格式: %o %#o 打印带前缀的形式
十六进制格式:%x %#x 打印带前缀的形式
2、C语言表示
int main()
{ int a = 100; printf("%d %o %x\n", a, a, a); return 0;
};
所有的数据在内存中都是二进制, 不同进制的表示方式只是为了让人类阅读起来更方便。 不同的进制之间没有本质区别,只是让人类阅读的感受不一样。
3、进制之间的转换
3.1 其他进制转十进制
1)二进制转十进制
二转十: 二进制每个位上的数,与其对应的权值相乘,再将对应的结果相加。得到的就是十进制的值 。 其他进制同理
2)八进制转十进制(了解)
3.2 二进制转其他进制
二转十: 二进制每个位上的数,与其对应的权值相乘,再将对应的结果相加。得到的就是十进制的值 。二转八: 从右往左 每三位进行分割(不足三位 用0补齐) 二进制的每三位数,对应转换成八进制的一位数。 001 101 011 = 0153
1*2^0=1 1*2^0+0*2^1+1*2^2=5 1*2^0+1*2^1+0*2^2=3二转十六:从右往左 每四位进行分割(不足四位 用0补齐) 二进制的每四个数,对应转换成十六进制的一位数。0110 1011 = 0x6B
0*2^0+1*2^1+1*2^2+0*2^3=6 1*2^0+1*2^1+0^2^2+1*2^3=11(b)
例:
二进制 八进制 十六进制
011000000 0300 0xc0
11001100 0314 0xcc
10101010 0252 0xaa
11111100 0374 0xfc
10000111 0207 0x87
3.3 其他进制转二进制
十转二: 将十进制数,对二取余数,再将本次的商作为被除数继续对二取余,直到商为0时为止。将得到的余数,从后向前依次读出,即为转换的二进制数
八转二: 八进制每位数,对应转换成二进制的三位数(每位数都进行十进制转为二进制操作)。
1 5 3
001 101 011十六转二: 十六进制的每位数,对应转换为二进制的四位数
0x 6 B0110 1011(短除法)
2|13
————
2| 6 。。。。1
————
2 | 3 。。。0
————
2 | 1 。。。1
————
0 。。。1
13 转为二进制:1101