Loading... 7.1 进制的概念 ========= 十进制 --- 在日常生活中,通常使用10进制进行计数 基础符号: 0 1 2 3 4 5 6 7 8 9 10进制计数时,逢十进位 0 1 2 3 … 7 8 9 10 11 12 13 … 17 18 19 20 21 22 23 … 27 28 29 30 31 32 33 … 37 38 39 一共10个符号,数到9就完了,就必须采用进位的手段来计更大的数 对于一个10进制的数,每一位有不同的权重 例如,2 6 2 每一位代表的是: 2 x 100 6 x 10 2 x 1 其中,262 = 3 x 102 + 6 x 101 + 2 x 100 八进制 --- 类比一下,可以得到八进制的规律 基础符号 0 1 2 3 4 5 6 7 计数:( 逢八进位 ) 0 1 2 … 6 7 10 11 12 … 16 17 20 21 22 … 26 27 八进制数 2 3 6 = 2 x 82 + 3 x 8 + 6 二进制 --- 类比一下,可以得到八进制的规律 基础符号 0 1 计数:( 逢二进位 ) 0 (0) 1 (1) 10 (2) 11 (3) 100 (4) 101 (5) 110 (6) 111 (7) 二进制数 110 = 1 x 22 + 1 x 2 + 0 十六进制 ---- 十六进制有16个基础符号 0 1 2 3 4 5 6 7 8 9 A B C D E F 计数:( 逢十六进位 ) 0 1 2 … 8 9 A B C D E F 10 11 12 … 18 19 1A 1B 1C 1D 1E 1F 20 21 22 … 28 29 2A 2B 2C 2D 2E 2F 十六进制数 2 A C = 2 x 162 + A x 16 + C 小结 -- 介绍了进制的概念 计算机编程领域有2进制,8进制,10进制,16进制,36进制,64进制。 常见的是2进制,10进制,16进制 需要掌握:给定一个16进制,会换算成10进制 7.2 十六进制 ======== 十六进制,是C语言编程里用的比较多的计数表示法 在 C 语言代码里,用 0x 代表一个16进制数 示例1: ``` int a = 0x2A; int b = 42; printf("a=%d, b=%d \n", a, b); ``` 换算一下,0x2A = 2 x 16 + 10 = 42 示例2: ``` int a = 0x12345678; int b = 12345678; printf("a=%d, b=%d \n", a, b); ``` 显然,a,b 的值是不同的,a的值要大一些 示例3: 使用%X 可以按十六进制打印 ``` int a = 55; printf("16进制: %X \n", a); printf("16进制: %08X \n", a); ``` 其中,%08X 表示补齐8位,不足时补0 注意 -- 1 八进制也可以直接表示,但用的不多 如: int flag = 022; // 以0开头的表示8进制 2 二进制在C语言里不能直接表示 int b = 1100101; // 二进制不能直接写! 小结 -- 介绍了十六进制在C语言中的表示和显示 7.3 二进制 ======= 二进制与十六进制 -------- 二进制与十六进制的对应: 0 ( 0 ) 1000 ( 8 ) 1 ( 1 ) 1001 ( 9 ) 10 ( 2 ) 1010 ( A ) 11 ( 3 ) 1011 ( B ) 100 ( 4 ) 1100 ( C ) 101 ( 5 ) 1101 ( D ) 110 ( 6 ) 1110 ( E ) 111 ( 7 ) 1111 ( F ) 2进制↔16进制 --------- ( 四位一组 ) 0100 1100 ↔ 4C 1010 1111 ↔ AF 1110 0001 ↔ E1 二进制的物理表示 -------- 在计算机硬件里,数据是以二进制表示的 一般高电平代表1,低电平代表0 通俗示例:灯亮为1,灯灭为0 ![二进制转十六进制.png][1] 在计算机里,数据的最小存储单位是字节 Byte 1 Byte = 8 Bit ( 1 字节含8位 ) 全0时,00000000 , 表示 0x00 ( 0 ) 全1时,11111111 , 表示 0xFF (255) 所以,一个 Byte 可以表示 0 - 255 之间的整数 那么,有一个数 2018 ,应该用几个Byte表示 2018 = 0111 1110 0010 ( 1.5 字节 ) 9000000 = 1000 1001 0101 0100 0100 000 ( 3字节 ) 而 int 类型是4个字节,所以用int可以表示上述数值 int a = 2018, b = 9000000; 正数与负数 ----- 通常,最高位称为符号位 最高位0:表示正数 最高位1:表示负数 所以,一个字节可以表示 -128 ~ 127 范围的整数 ( -128, -127, …, -2, -1, 0, 1, …, 127 ) 注:了解一下,无需深入 小结 -- 介绍了二进制的概念,以及二进制的物理表示 本节只需了解大概原理: 一个字节8个位,一个字节最多表示0-255 一个int是4个字节,可以表示很大的数 11111111 11111111 11111111 11111111 7.4 变量的内存地址 =========== 在 C 语言里,每一个变量都有一个内存地址 示例1: int count = 10; int* ptr = &count; printf("address: %p \n", ptr); 其中, `int*` 是一种新的类型,表示`int`型变量的地址 `&a` 表示取得a的内存地址, `%p` 表示打印地址 注意: 1 变量的地址是随机分配的,每次运行都不一样 2 int* 视为一个整体,是一个新的类型 3 一个int占4个字节,字节的顺序是小端在前 比如 0x12345678 的排列顺序是 78 56 34 12 观测 int 的内存值 ----------- 示例2: int a = 10; int* p = &a; printf("address: %p \n", p); a = 0x12345678; a = 0x55555555; 注:在断点状态下,打开 调试|窗口 | 内存| 内存1 小结 -- 了解了使用 int* 表示int变量的地址 学会了在内存窗口观察变量值的变化 [1]: http://wmicheng.top/usr/uploads/2020/10/3988076834.png 最后修改:2020 年 10 月 31 日 © 允许规范转载 打赏 赞赏作者 赞 如果觉得我的文章对你有用,请随意赞赏