编程是我们与计算机沟通交流的方式;
汉语 英语 韩语等是人类的自然语言,但是计算机识别不了,所以人类想尽一切办法发明了以下语言;
机器语言 最早的人类与计算机交流的语言;
汇编语言 人类发明的 计算机交流的二代语言 加上了一些特殊的语言 比如 指令 函数等;
高级语言 与自然语言相近的语言 ,比如C C++ java phyton 等等;
机器码最早是由于二极管发源而来的 相当于节能灯 ;
开灯(1) 关灯(0) 所以产生了机器码(二进制);
那么计算机与人类交流的方式:通过数据与人类交流沟通;
计算机众多的零部件中和数据打交道的硬件有哪些呢?
CPU 磁盘 内存;
作案工具 IDE(集成开发环境)——————编程软件
编译器:翻译(把代码翻译给计算机)
调试器:帮助我们找BUG的神器
代码编译器:比记事本还要流弊的记事本(提供联想代码快速生成行号等功能)
其编译过程:a.c 代码如何变成a.exe经历了什么?
1 预编译: 展开头文件与宏替换 gcc---E a.c---o a.s
2 汇编: gcc---s.a.i---o a.s
3 编译: (多文件联合编程) gcc--- c a.s --- o a.o
4 链接:(多个obj或.o 文件链接在一起编程 .exe文件)
gcc a.o --- o a.exe (b.exe xxx .exe )
c语言分数据类型
数据类型关键字12个
char, short, int, long,float, double,unsignef, signed, struct,union, enum, void.
控制语句关键字12个
if,else, switch,case,default,for,do ,while, break, continue,goto,return.
存储类型 5个
auto,extren, register,static,const.
其他关键字3个
sizeof, typedef, volatile.
它们的作用:编译器预算对象分配发的内存空间大小.
数据类型:基本类型:整形L(int,short,long) 字符型 char 实形/浮点型 float double
构造类型 “数组类型 结构类型 struct 联合类型(union) 枚举类型 (enum)
指针类型:(char,in,int*等)
常量 整形 :100,200
实形:3.14, 0yke.125,-3.66456
字符型 \'a\' , \'b\', \'c\' , \'e\'
字符串常量:"Hello World "
变量:先定义再赋值 可以改变的量
标识符的命名规则
1标识符不能是关键字
2标识符只能由字符,数字 ,下划线组成
3.第一个字符必须为字母或者下划线
4标识符中字母区分大小写
变量特点:
1.变量在编译时为其分配相应的内存空间
2.可以通过其名字和地址访问相应内存
声明和定义的区别
声明变量不需要建立存储空间 如:extern int a;
定义变量需要建立存储空间 如: int b ;
#include<stdio.h> int main (){ extern int a ; a=10; int b=10; return 0 ; }
上述声明是小区间 而定义为大区间 ;
#include<stdio.h> #define MAX 100; //开头的语句为预处理语句 无需分号结尾; //定义一个宏定义标识符MAX 他代表 100 MAX 是常量 //宏定义以后的代码都可以使用MAX //在后面出现的MAX ,预处理都会替换为100 int main () { MAX; MAX; //const 是一个关键字,作用是修饰一个变量为只读 const int b=10086; return 0; //进制输出方式 int a=10 ; int b=010; int c=0x10; printf("%d/n",a); printf("%o/n",a); printf("%x/n",a);
计算机的内存数据存储方式;
原码:将最高位作为符号位 (0正 1负)其余各位代表数值本身绝对值;
+7的原码:0000 0111
-7的原码: 1000 0111
+0的原码: 0000 0000
-0的原码: 1000 0000
反码:一个数为u正 则反/原码相同, 若一个数为负 则符号位为1,其各位与原码相反
+7反码:0000 0111
-7反码: 1111 1000
+0反码:0000 0000
-0反码: 1111 1111
补码:反码 /原码都不利于计算,如+7加-7 ,还需要判断符号位
整数 原码 反码 补码都是相同的
负数:最高位为1 其余各位与原码相反 最后对整个数加1
-7的补码:1111 1000
+0的补码:0000 0000
-0的补码: 1111 1111
补码符号位不动,其他各位原码取反 最后对整个数加1 得到原码
sizeof 关键字
sizeof 是C语言关键字 ,功能是求指定数据类型在内存的大小 范围 字节
int 类型
int 常量变量 (int是32位的一个二进制数,在内存中存储4个字节)
int 不管是32位系统还是64位系统下, 不论是windows 还是unix 都是4个字节
整形溢出:计算一个整数的时候超过整数能够容纳的最大单位后,数据会溢出,溢出的结果是高位舍弃
;当一个小的整数赋值 给大的整数,符号位不会丢失 会继承
大端对齐与小端对齐
对于arm,Intel 这种x86 构架的复杂指令cpu 整数内存是倒着存放的,低地址放地位 ,高地址放高位,小端对齐
但对于unix 服务器 cpu 更多采用大端对齐的方式存放整数
char 常量变量
char c ; 定义一个char 变量
不可打印的char 字符
/a 警报
/b 退格
/n换行
/r 回车
/t 制表符
//斜杠
/‘单引号
/?问号
char 与unsigned char
char的取值范围为 -128到127
unsigned char 为0-255
float double
浮点型 变量
float(4) double (8)
输出
printf %f %lf
volatile:代表变量是一个可能被cpu指令 以外的地方 编译器就不会针对这个变量去优化目标代码
register:变量在寄存器里面,而不是在内存里面。但register是建议指令 而不是命令型指令
字符 对应数据类型
d int
hd short int
hu unsiged short int
o unsigned int
u unsigned int
x/X unsigned int
f float/double
e/E double
c char
s/S char* /wchar_t*
P void*
% %
l 附加在d,u,x,o 前面 表示长整数
-- 左对齐
m 数据的最小宽度
0 将输出的前面补上0 直到指定列宽为止(不可以搭配“使用)
N 宽度至少 N位 不够以空格填充
putchar 是显示一个字符的函数
*scanf 函数与getchar函数
scanf 通过键盘读取用户输入 放入变量中 记得参数一定是变量的地@&(首地址)
#include<stdio.h> int main() { char x; x = getchar(); printf("%d,/n", x); //b=98 //b=66 结果不一样 return 0; }