推荐用书:C语言 谭浩强 (薄本)
gcc 预编译、编译、汇编、链接
-E -o |-S -o | -c -o | -o
生成 .i | .s | .o | a.out
汇编的最终目的:生成二进制文件
链接的最终目的:生成可执行文件
在位系统中数据类型在内存中所占的相应字节:
int 4B
float 4B
double 8B
char 1B
每个类型都有自身所占的位数,每个类型都有相应的数的表示范围,
同时每个类型分为无符号数和有符号数,有无符号数的表示范围不同
测数据类型的长度: sizeof()
以int和unsigned int为例进行数据类型所能表示相应数据长度的推导:
unsigned int __________|__________|_
0 2的32次方减一
二者之间的长度为2的32次方
int ____|______|.______|_______
负2的31次方-1 0 2的31次方
二者之间的长度为2的32次方
unsigned int的范围: 0~2的32次方减一
int的范围 :负2的32次方~ 2的32次方减一
有符号数和无符号数的计算(int 和 unsigned int)
1.int类型的输出占位符为:%d
unsigned int的输出占位符为: %u
2.定义一个数并且给他赋值后不能输出的可能原因:可能是赋的值太大了,超出了该类型的表示范围
3.数值类型决定了变量的范围
数据名字确定了首地址
(计算机中地址是连续的,我们的地址分配在定义变量的时候就已经分配了)
4.若int和unsigned int两个类型的数值进行运算,默认的计算类型为unsigned int
(因为unsigned int的精度比int的精度大)
输出时占位符为%d则用类型int计算,
输出时占位符为%u则用unsigned int进行计算
若在定义变量时: int a;
printf(“%d\n”,a); 会发现输出的结果是一堆系统随机分配的数字
char的编码方式:ASCII
char —— ASCII
97 a
65 A
char类型的表示范围:-128~127
unsigned char: 0~255
转义字符:\n \’ \”
字符赋值的方法:’ ‘
字符的占位符: %c
字符串的占位符:%s
‘\0’ 作为字符串的结束标志
“China” 占6个字符的内存大小,但是\0并不输出
混合运算:由低到高:char 、short -> int ->unsigned int -> long -> double
float类型的占位符:%f
若控制输出小数点后几位: %.nf
运算符:
算数运算符: + - * /
关系运算符:> < == >= <= !=
逻辑运算符:! &&(与) ||
位运算符:<< >> ~ | ^ &(与乘)
赋值运算符:=及其扩展赋值运算符
条件运算符:?:(三目运算符)
逗号运算符:( , )
指针运算符:*和&
关于++和--
1.++在右边时,先赋值再运算: int a=3,b;
b=a++;(此时b=4,a=3)
2.++在左边时,先运算再赋值:int a=3,c;
c=++a;(此时c=4,a=4)
scanf:我们在用scanf输入时,一定要跟着scanf的格式走
printf和scanf的运行机制:
printf:输出时使用,表示输出一个数值
scanf:输入时使用,&,表示取输入一个值得这个地址
布尔类型(bool):这个变量只有两个值0和1
在C语言中,使用bool要有相应的头文件:stdbool.h
= 赋值
== 比目运算符 if(只能用==)
if: if...else
for:for( ; ; )
while:先判断再执行
do...while:先执行再判断
宏定义: #define 一些大写字母 数字
eg: #define MAX 10
使用gcc编译时,宏定义在预处理的时候被处理