day2
1.基础知识
1.1.冯诺依曼模型
1.2.程序
广义:为了实现特定目标而余弦设计的可操作性步骤。
狭义:系统可以识别的有序指令。
机器语言:
使用机器指令(1,0)来设计程序
1.3数据
定义:送入计算机的数字,能够运算成为计算机数据,其余为非数值数据。
1.3.1数值数据
进制
十进制
二进制
八进制 0开头
十六进制 0x开头
其他进制转十进制
(1)维权表达式
十进制转二进制:
(1)短除法
(2)凑方法
八进制转二进制:一位换三位
十六进制转二进制:一位换四位
1.3.2非数值数据
字符数据
‘a’‘b’‘c’‘1’‘2’‘3’(有引号为字符,无引号为数字)
ASCII码
常用可记:
‘\0’--0;‘\n’--10;‘ ’--32;
‘0’--48(字符0-10ascii码从0开始为连续);
‘A’--65(字符A-Zascii码从A开始为连续);
‘a’--97(字符a-Zascii码从A开始为连续);
gcc编译步骤
1.预处理: 宏替换、条件编译、去注释、头文件的展开等
gcc -E test.c -o test.i
2.编译:检查语法错误,将c文件生成汇编文件
gcc -S test1.i -o
3.汇编:把汇编文件生成机器码
4.连接:连接相关.o和相关库
1.4C语言的框架
#include<stdio.h>
int main{
return 0;
}
1.5词法符号
1.5.1关键字
auto break case char const(修饰限定) do continue for float typedef
有颜色,皆小写,不允许重新定义。
1.5.2标识符
程序员自己取的名字(宏名,变量名,函数名和自定义类型名)
1.5.3分隔符
空格符、制表符(tab)、换行符、注释(//,/* */)
1.5.4运算符
算数运算符:+ - * / %(必须为整型),有优先级
逻辑运算符
&& || !
逻辑与 &&:全真为真,有假必假(比如谈恋爱)
逻辑或 ||:有阵就真,全假为假
逻辑非 !:表达式为真,整体为假
短路法则:逻辑与第一个表达式为假,后一个表达式必须要判断(也不会执行),整体为假
逻辑或第一个表达式为真,后一个表达式必须要判断(也不会执行),整体为真
关系运算符
> < <= >= == !=
真:1(非0为真)
假:0
关系运算符的结果 只有0和1
位运算符
& | ~ >> <<
位运算是二进制位的运算
C语言存的都是补码 正数:三码合一 负数:有区别
把最高位作为符号位 0:正数 1:负数
7
0000 0111
-7
1000 0111
原码:最高位符号位,其余位数值位
7
0000 0111
-7
1000 0111
反码:符号位不变,其余位取反
7
0000 0111
-7
1111 1000
补码 :反码基础上 + 1
7
0000 0111
-7
1111 1001
补码转原码:
(1)逆推法
(2)补码的补码就是原码
位与&:
1&1=1 1&0=0 0&1=0 0&0=0
5 & 3 = 1
-5 & 3 = 3
位或|:
1|1=1 1|0=1 0|1=1 0|0=0
位取反~:
~1 = 0 ~0 = 1
>>n 右移n位 :右边移出去,左补符号位
正数:
10 >> 2
0000 1010 0000 0010
负数:
-13
1000 1101
1111 0010
1111 0011 >> 3
1111 1110
1000 0001
1000 0010
15 >> 4
-23 >> 2
<<n 左移n位 : 左边移动出去,右边补0
正数:
0000 0111 << 2
0001 1100
负数:
-1
1000 0001
1111 1110
1111 1111 << 3
1111 1000
1000 0111
1000 1000
作用:
char a = 10; 0000 1010
a = 8; 0000 1000
***************************************清零********************************
0000 1010 第1位清零 ? & 0 = 0
& 1111 1101 ? & 1 = ?
1 0000 0001
1 << 1 0000 0010
~ 1111 1101
char a = 10;
a = a & (~(1 << 1))
& 0000 1010 第1位和第3位清零
1111 0101
a = a & (~(1 << 1 | 1 << 3))
a &= (~(1 << 1 | 1 << 3));
***************************************置位(置1)**********************************
char a = 10; 0000 1010 把第 5 位置1 ? | 0 = ?
? | 1 = 1
0000 1010
| 0010 0000
a = a | (1 << 5);
char a = 10; 0000 1010 把第 5、7 位置1
a = a | (1 << 5 | 1 << 7)
1111 1010 5~7 置成 101
赋值运算符
= 把等号右边的值,赋值给等号的左边
注意:等号的左值不能为一个常量
复合赋值
+= a+=10 --> a = a + 10;
-=
*=
/=
eg:int a = 2;
a += 20 * 20; //a = a + (20 * 20);
递增递减运算符
++ --
(1)++ -- 独立成一句
前++ 等价与 后++
前-- 后--
(2)在运算式中
前++ 前--: 先进行自加(自减)运算,运算后的结果作为整体的值
后++ 后--: 先取值作为整体的值,再进行自加(自减)运算
地址运算符
& 取地址
逗号运算符
,
int a;
a=10,20,30; 每一个式子都会执行
最后一个式子的结果作为整体的值
a = (a + 10, 60, 100 + 30);
sizeof运算符
用于计算数据类型的大小 --- 结果是数据类型的大小 单位为字节
一个字节 --- 8位二进制数
1024b = 1kb
1024kb = 1mb
1024mb = 1gb
1024gb = 1Tb
1GB = 2^3 * 2^10 * 2^10 * 2^10 = 2^33
sizeof(int)
三木运算符
表达式1 ? 表达式2 : 表达式3
如果表达式1为真,则执行表达2,
假, 3
三目运算符用于简单的判断,复杂的用if else switch case
1.6打印调试
宏定义
#define 宏名 替换内容 ---宏名一般大写
eg:
#define N 10 + 10
printf("%d\n", N*N); 10 + 10 * 10 + 10 ... 120
(N 为(10+10)时,打印后结果为400)
作用:
(1)便于修改
(2)提高阅读性
1.7数据类型
基本数据类型
数据类型大小
分类型存储,避免浪费空间
signed char类型中,规定1000 0000为-128
unsigned char类型中,1111 1111为255(最大)
越界报错,short类似
外:浮点型存储方式--科学计数法