#include<stdio.h>
int main() {
// 进制了解性内容
//计算机所有的数据都是二进制存在的 C语言中整数默认都是十进制数
//二进制 - 数字组成:0-1
//进位规则:满二进一,以`0b`或`0B`开头
// 由来 德国 莱布尼兹
//
// 八进制
// - 数字组成:0-7
//进位规则:满八进一,以数字`0`开头表示
//
//十六进制
//数字组成:0 - 9,a - f
//进位规则:满十六进一,以`0x`或`0X`开头表示。此处的 a - f 不区分大小写
int n1 = 10;//十进制
int n2 = 0b10;//二进制
int n3 = 017;//八进制 换成十进制为15
int n4 = 0x1a;//十六进制
printf("%d\n",n1);
printf("%d\n",n2);
printf("%d\n",n3);
printf("%d\n",n4);
//不同的进制只是整数的书写方法不同,不会对整数的实际存储方式产生影响。不同进制可以混合使用,比如 10 + 015 + 0x20 是一个合法的表达式。
/*printf() 的进制相关占位符如下:
%d :十进制整数。
%o :八进制整数。
%x :十六进制整数。
%#o :显示前缀 0 的八进制整数。
%#x :显示前缀 0x 的十六进制整数。
%#X :显示前缀 0X 的十六进制整数。*/
int x = 100;
printf("100的十进制 = %d\n", x); // 100
printf("100的八进制 = %o\n", x); // 144
printf("100的十六进制 = %x\n", x); // 64
printf("100的前缀 0 的八进制整数 = %#o\n", x); // 0144
printf("100的前缀 0x 的十六进制整数 = %#x\n", x); // 0x64
printf("100的显示前缀 0X 的十六进制整数 = %#X\n", x); // 0X64
//计算机数据的存储使用二进制`补码`形式存储,并且`最高位是符号位`。
//正数:`最高位是0`
//负数:`最高位是1`
//规定1:正数的补码与反码、原码一样,称为`三码合一`
//规定2:负数的补码与反码、原码不一样:
//负数的`原码`:把十进制转为二进制,然后最高位设置为1
//负数的`反码`:在原码的基础上,最高位不变,其余位取反(0变1, 1变0)
//负数的`补码`:反码 + 1
//十进制转化为二进制,需要 《取余的逆》 比如 6/2 ....0 3/2....1 1.....1 0
// 二进制就是 0000 0110
// 二进制转换为 八进制 三位看成一个十进制 数
// 二进制转换位 十六进制 四位看成一个十进制 数
return 0;
}