1、二进制由 0 和 1 两个数字组成,使用时必须以0b或0B(不区分大小写)开头
2、符号位+进制形式+进制数据
(进制形式决定后面的数据是哪种进制)
3、合法的二进制
int a = 0b101; // 0b是二进制的进制形式 101是进制数据 换算成十进制为 5
int b = -0b110010; //- 为符号位 代表负数 换算成十进制为 -50
int c = 0B100001; //换算成十进制为 33
4、八进制由 0~7 八个数字组成,使用时必须以0开头(注意是数字 0,不是字母 o)(0身高高点,o身材圆润一些)
5、合法的八进制数
int a = 015; //0代表8进制换算成十进制为 13
int b = -0101; //-代表为负数 0代表八进制 换算成十进制为 -65
int c = 0177777; //换算成十进制为 65535
6、十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,使用时必须以0x或0X(不区分大小写)开头
7、八进制输出为o%,十进制输出为d%,十六进制输出x%
8、pringtf函数无法直接输出二进制格式的数据,需要做转换才能输出,输出的格式为字符串的s%
9、十六进制数字的表示用到了英文字母,有大小写之分,要在格式控制符中体现出来:
%hx、%x 和 %lx 中的x小写,表明以小写字母的形式输出十六进制数;
%hX、%X 和 %lX 中的X大写,表明以大写字母的形式输出十六进制数。
10、数字在内存中始终以二进制的形式存储,其它进制的数字在存储前都必须转换为二进制形式;同理,一个数字在输出时要进行逆向的转换,也就是从二进制转换为其他进制。
11、区分不同进制数字的一个简单办法就是,在输出时带上特定的前缀。在格式控制符中加上#即可输出前缀,例如 %#x、%#o、%#lX、%#ho 等
12、数字有正负之分。在C语言中也是一样,short、int、long 都可以带上正负号
13、符号也是数字的一部分,也要在内存中体现出来。符号只有正负两种情况,用1位(Bit)就足以表示
14、C语言规定,把内存的最高位作为符号位。以 int 为例(占据4字节,1字节等于8位),它占用 32 位的内存,0~30 位表示数值,31 位表示正负号
15、C语言规定,在符号位中,用 0 表示正数,用 1 表示负数。
16、short、int 和 long 类型默认都是带符号位的,符号位以外的内存才是数值位(数据长度=符号位+数据位)数据位总是比符号位的位数低
17、如果不希望设置符号位,可以在数据类型前面加上 unsigned 关键字(unsigned long c = 9892320;)(需要注意的是如果使用无符号位的话只能表示正数,不能表示负数)
18、你让我输出无符号数,那我在读取内存时就不区分符号位和数值位了,我会把所有的内存都看做数值位;你让我输出有符号数,那我在读取内存时会把最高位作为符号位,把剩下的内存作为数值位。