6.二进制、八进制、十进制、十六进制转换
- 二进制:以2为基数,用0和1这两个数字来表示数值,逢二进一。
- 八进制:以8为基数,用0到7这八个数字来表示数值,逢八进一。
- 十进制:以10为基数,用0到9这十个数字来表示数值,逢十进一。
- 十六进制:以十六位基数。用数字0到9和字母A到F(或a到f)来表示数值,逢十六进一。其中A到F对应十进制数10到15.
- 各进制权重,从右往左依次为,基数的0次方、1次方、2次方,以此类推。例如:对于二进制数,每个数字位置的权重,从右往左依次是,2的0次方、2的1次方、2的2次方,以此类推。
- 二进制间的转换方法:
二进制、八进制、十六进制转十进制:乘以对应位的权重,求和。
例如,二进制数1010转10进制:1×2^3+0x2^2+1×2^1+0x2^0=8+0+2+1=11;
八进制数123转十进制:1×8^2+2×8^1+3×8^0=64+16+3=83;
十六进制数2AF5转十进制:2×16^3+A(10)x16^2+F(15)x16^1+5×16^0=10997;
- 十进制转二进制:除2取余,逆序排列。
- 十进制转八进制:除8取余,逆序排列。
- 十进制转十六进制:除16取余,逆序排列。
- 二进制转八进制:每三个二进制分为一组(从右往左分,不够三个的,在前面补0),转换位对应的八进制数。
例如:二进制数1010101转换成八进制:
1010101(分组)->00 010 101(转换)->1 2 5(拼接)->125
- 二进制转十六进制:每四个二进制分为一组(从右往左分,不够四个的,在前面补0),转换成对应的十六进制数。
例如:二进制数10110101转换为十六进制:
10110101(分组)->1011 0101(转换)->B 5(拼接)->B5
- 八进制转二进制:把每个八进制转换成三个二进制数。
例如:八进制345转换为二进制:
3 4 5(转换)->011 100 101(拼接)->11100101
- 十六进制转二进制:把每个十六进制转换成四个二进制数。
例如:十六进制数2F转换成二进制:
2 F(转换)->0010 1111(拼接)->101111
- 十进制小数转二进制小数:乘2取整,顺序排列。
例如:十进制小数0.625转换为二进制:
0.625×2=1.25,整数为1,小数围殴0.25。
0.25×2=0.5,整数为0,小数为0.5。
0.5×2=1,整数位1,小数为0。(当积的小数部分为0时停止计算,
或当小数部分开始循环时,达到足够的精度就结束计算)对应的二
进制小数:0.101。
7.原码、反码和补码
- 原码、反码和补码是二进制整数的不同表示方式,主要用于二进制数的加减运算。
- 原码:最高位(即最左位)是符号位,0表示正数,1表示负数;其余位表示数值大小。
- 反码:
正数的反码:与原码相同。
负数的反码:在原码的基础上,符号位不变,对其余位取反。(取反就是0变1,1
变0)。
- 补码:
正数的补码:与原码相同。
负数的补码:在反码的基础上,再加1。
例如:用8位二进制表示+5、-5的原码、反码和补码。
+5的原码:00000101 -5的原码:10000101
+5的反码:00000101 -5的反码:11111010(符号位不变,其余取反)
+5的补码:00000101 -5的补码:11111011(反码基础上加1)
- 在原码和反码中,0有+0和-0两种表示形式;补码中只有一个无符号0;
- 二进制数的加法运算:
列出竖式,逢2进1,若计算结果出现溢出,则从右往左保留有效位数。比如,在8
位二进制加法中,如果计算结果超过8位,就从右往左保留8位,舍弃溢出的部分。
例子:
8.与、或、异或、取反、左移、右移
9.变量、命名规则、书写风格
- 变量:用来存储或引用数据,程序运行过程中其值可以改变。
- 便来个的四个属性:变量名、变量类型、变量的值、变量的地址。
- 变量名是由用户定义的标识符。标识符是程序中各个元素(如:变量、函数、数组等)的名字。
- C语言标识符分为关键字、预定义标识符和用户标识符。
- C语言关键字如下:
- 预定义表示符是预先定义好的具有特定用途的名字,如标准库里面的函数名。
- 用户标识符的命名规则:
- 变量类型决定了变量虽能存储的数据类型。
- 变量的值是变量存储的具体数据。
- 变量的地址是变量在内存中的位置。
- 变量遵循“先定义、后使用”。
- 两种定义方式:
- 良好的书写风格不会直接影响程序的执行效率,但能提高代码的可读性、可维护性和可扩展性。
- C语言的书写风格:
10.int、char、float、double类
- 由于浮点数类型的表示位数有限,float类型和double类型在存储和运算中都可能会存在舍入误差。
- 对应int、float、double类型变量,如果赋值超出其可表示的范围,会导致数据溢出(即无法正确表示该数值)。
- char类型在内存中占1个字节,比如说一个字母、数字或其他符号。
- 定义一个char类型变量例子:char char_1= ‘A’;(注意用单引号包裹!)。打印一个char类型变量例子:printf(“%c”,char_1);
- char类型实际上存储的是字符对应的整数值,字符和整数值之间的对应关系是由ASCII码定义的。
- 标准的ASCII码总共定义了128个字符和对应整数值。比如,根据ASCII码表(如下图),大写字母F对应的整数值是70。标准版ASCII码+拓展请点击以下链接:ASCII 表 | 菜鸟工具。
- 将ASCII码表上的十进制整数值转换为八进制或十六进制后,可以使用相应的转义符来表示对应的字符。
- 八进制的转义符:以‘\’开头,后面跟着最多三位的八进制数,例如‘\010’;
- 十六进制的转义符:以‘\x’开头,后面跟着16进制数,例如‘\x4b’。例如,大写字母F的ASCII码值是70,可以用’\106’(八进制表示)或’\x46’表示。
- C语言允许对int类型变量赋予字符值,也允许对char类型变量赋整数值。在输出时,允许把cahr类型变量按整数形式输出,也允许int类型变量按字符输出。
- 可以同时定义多个相同类型的变量,各变量名之间用逗号隔开。例如:int a, b, c;
- 对多个变量赋初始值时,有以下几种方式:
- 即使给多个变量赋同样的初始值,也要分别赋值,不能用等号连接。
- 占位符:
注:文章只为自己学习,不做任何商业用途,来源为哔哩哔哩林粒粒老师的小白玩转C语言。
未完待续……