概述
GCC编译过程
1.预处理(preprocessing):gcc -Wall -E 1.c -o 1.i 将源程序文本预处理为被修改的源程序文本
2.编译(compilation):gcc -Wall -S 1.i -o 1.s 将修改的源程序文本编译为汇编程序文本
3.汇编(Assembly):gcc -Wall -c 1.s -o 1.o 将汇编程序处理为可重新定位目标程序(2进制)
4.链接(Linkling):gcc -Wall -g 1.o -o 1 处理为可执行程序(二进制)
进制
1. 二进制→八进制:三个一组 (八进制开头用0)
2.二进制→十六进制:四个一组(开头0x为16进制数)
注:
3.符号位为1表示负数 0为正数
4.负数用补码存储,正数补码,反码,原码一样
(为什么用补码存储?例:6-5可以直接表示为6+(-5)的补码)
5.反码:符号位不变,其余位取反(例:10110010-11001101)
6.补码:反码+1(例:11001101-11001110)
数据类型
1.基本类型(整型,字符型,实型,枚举型)
2.构造类型(数组,结构体struct,共用体union)
3.指针类型
4.空类型 void
变量字节数比特数取值范围(注意取值范围不要数据越界)
类型 | 字节数 | 比特数 | 取值范围 | |
signed int | 4 | 32 | -2^31~2^31 -1 | |
unsigned int | 4 | 32 | 0~2^32 -1 | |
signed short | 2 | 16 | -2^15~2^15 -1 | |
unsigned short | 2 | 16 | 0~2^16 -1 | |
long int | 4 | 32 | -2^31~2^31 -1 | |
unsigned long int | 4 | 32 | 0~2^32 -1 | |
float | 4 | 32 | 有效数字6-7 | |
double | 8 | 64 | 有效数字15-16 | |
long double | 16 | 64 | 有效数字18-19 | |
signed char | 1 | 8 | -2^7~2^7 -1 | |
unsigned char | 1 | 8 | 0~2^8 -1 |
printf中的输出数据类型
%hd (短整型) %d(整型) %c(字符型) %u(无符号型) %f(对应浮点型)%e(指数型)
sizeof():返回类型占用的字节数
浮点型在内存中的存储形式((-1)^S*E*2^M)
1.float
S(符号位)1bit | E(8bit) | M(23bit) |
2.double
S 1bit | E 11bit | M 52bit |
常量和变量
1.常量:程序运行期间不发生变化的量(字符串常量,标识常量等)
2.变量的命名规则:
由数字 字符 _ 组成
第一个字符不能是数字
不能用关键字 int char等
3.变量说明形式:<存储类型><数据类型><变量名>
4.变量初始化的一般形式:<存储类型><数据类型><变量>=<表达式>
数据类型转换
1.显示的数据类型转换一般形式(强制转换):(数据类型名称)<表达式> b=(int)(a+b+c)
2.隐式转换:char pp=86; int aa=pp;(直接赋值)
注:如果把取值范围大的赋值给取值范围小的可能会发生截断现象
例:int a=855; char b=a;(会发生截断,char只能保存8个bit)
强制数据类型转换的注意点
1.转换符后面表达式如存在复杂运算,要用小括号括起来。
2.它是一种不安全的转换,一般将高级数据类型转换为低级数据类型,会丢失数据精度。
3.不改变表达式变量的数据类型和其值。
类型隐式转换
1.+,-,*,/运算的两个数有一个为float或double,结果为double。
2.若int与float或double进行运算,先将int和float转换为double,然后运算结果为double型。
3.char与int进行运算,就是把字符的ASCII码与整型数据进行运算。
4.两个int相除,不管是否有余,结果为整型(5/10结果为0)
5.强制类型转换的一般形式为(类型名)(表达式)将表达式整体的输出结果转换,若写成(int)x+y,则是将x先转换为整型,再与y相加。
例:
double p=5/10 结果为0(5和10都是整型,结果不管有无余必为整型)
5.0/10的输出结果为0.5(5.0是floa型,结果必为浮点double)
(float)(5/10)输出结果为0.00(5和10为整型,结果为整型0转化为浮点型0.00)
(float)5/10输出结果为0.5(先将5转化为浮点型,所有输出结果为浮点型0.5)
C语言运算符
1.+,-,*,/,%(取模/求余),++(增1),--(减1)。
注:++i和i++的区别:符号在前面会先运算在返回值
例:
int i=0;
i++;
printf("%dn",i);
printf("%dn",i++);
++i;
printf("%dn",i);
输出分别是 1,1,3
将第二个输出换成printf("%dn",++i);
则输出为 1,2,3
2.关系运算符
> ,>=,<,<=,==,!=(主要用于判断循环条件)
3.逻辑运算符
!逻辑反
&& 逻辑与 (有0则0)
|| 逻辑或(有1则1)
4.位运算符
~ 位逻辑反 1111~0000
& 位逻辑与 101010&100000 →10000
| 位逻辑或 1011 | 0100 →1111
^ 位逻辑异或 (相同为0,不同为1,和0000异或是不变。和1111异或是取反)
>> 右移位 11101010>>1 :11110101(符号位不变,正0负1)注意有无符号位,有符号位就要补符号位,无符号位补0即可
<< 左移位 11101010<<1 : 11010100 (后面补0)
注:右移也可以做为除法,左移位是乘法
5.赋值复合运算符
a+=b(a=a+b),其余同理。。。。。
6.逗号运算符
从左到右依次运算,返回最后一个表达式的值。
算术移位,逻辑移位和循环移位
1.算术移位(有符号位的移位,要补符号位)
2.逻辑移位(无符号位的移位)
3.循环移位(x<<n | x>>(16-n))
4.求2的n次方(1<<n)
最后
以上就是欢呼柠檬为你收集整理的学习日记2-Linux c语言基础GCC编译过程进制数据类型变量字节数比特数取值范围(注意取值范围不要数据越界)printf中的输出数据类型sizeof():返回类型占用的字节数浮点型在内存中的存储形式((-1)^S*E*2^M)常量和变量数据类型转换强制数据类型转换的注意点类型隐式转换C语言运算符算术移位,逻辑移位和循环移位的全部内容,希望文章能够帮你解决学习日记2-Linux c语言基础GCC编译过程进制数据类型变量字节数比特数取值范围(注意取值范围不要数据越界)printf中的输出数据类型sizeof():返回类型占用的字节数浮点型在内存中的存储形式((-1)^S*E*2^M)常量和变量数据类型转换强制数据类型转换的注意点类型隐式转换C语言运算符算术移位,逻辑移位和循环移位所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复