二进制
1. 二进制和十进制的转换
1.1 非负二进制 转 十进制
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9cf97ffabec2f886949db01d0f73d75f.png#pic_center)
- 计算机里只能记录以二进制表示的数字
- 因为数字需要记录在内存里,而内存是有大量字节构成的,意味着内存的数字必须要记录在字节里,而一个字节被分成8段,每一段只能记录一个0或者1.所以必须要把数字转为成2进制的表示方式才能放在字节里.
1.2 非负十进制 转 二进制
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/224870962118ab892942cc7138ea1338.png#pic_center)
- 12这个数字转换成2进制以后,是由8个数位构成的,因为12是偶数,所以对应的2进制最后一位一定是0
- 12除以2以后,整数部分是6,. 对这8个二进制树也除以2(减少一个数位)并保留整数部分,就相当于丢掉了最右边的数位内容 , 6等于前7个数位, 又因为6是偶数,所以前7个数位最后一位是0
- …
- 最后得到0000 1100
1.3 负数十进制 转 二进制
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9a710ed2405f2143b78e0def48d0f50d.png#pic_center)
- B和C只是相同数字的不同进制表达方式, A和D分别是B和C的负数,A和D是不能直接做转换的
- 只能这样转: A <-> B<->C <-> D
- 十进制-14转二进制的步骤如下:
- 14 的二进制是 0000 1110
- 0000 1110 反码加1 是 1111 0010
- 1111 0010 就是 十进制-14 在二进制的表示方式
- 反码加一叫补码, 补码就是负数在计算机中的二进制表示方法
1.4 负二进制 转 成十进制
- 先判断二进制是负数还是非负数,需要先判断类型(无符号类型是不可能包含负数的)
- 如果是有符号类型,就看最左边数位的内容,0代表非负数,1代表负数。 把有符号类型的二进制数字中最左边数位叫做符号位
- 如果1010 0011 是有整数类型(4字节32位)二进制,说明它前面还有24个0没有写,这应该是非负数。整数类型在内存中占4个字节,每个字节占8个二进制数位内容, 所以一个整数类型一共包含了32个二进制数位内容
- 如果1010 0011 是字符类型(1字节8位),所有的数位都被写出来了,符号位是1, 说明这个数字是一个负数
- 先反码加一得到二进制的负数,1010 0011 -> 0101 1100 -> 0101 1101
- 再将正二进制转为十进制,0101 1101 -> 1 + 4 + 8 + 16 + 64 -> 93
八进制
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/035cd5f087b8353f1fdefd378eedc93a.png#pic_center)
- 把二进制所有数位,按照从右向左的顺序,每三个数位为一组。然后把每一组单独转换为十进制就得到八进制的表示方式
printf(%d %o, 0152, 0152);
十六进制
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/98dc7f71656bdeaf9657be80efcd7b79.png#pic_center)
- 把二进制所有数位,按照从右向左的顺序,每四个数位为一组。然后把每一组单独转换为十进制就得到16进制的表示方式
- 因为是每四个数位为一组,所以结果在0-15之间。 如果结果在0-9之间,那么可用这个转换结果代表这一组内容,但如果转换结果在10到15之间,规定用a-f这6个字母来替换10-15这6个数字。
- %x 和 %X 做占位符不显示开头的0x
printf(%d %x %X, 0xcd,0xcd,0xcd);