原码,补码,反码
关于 -128 ,+128,-0,+0,-1 的反码补码_-127+128原码-优快云博客
关于 -128 ,+128,-0,+0,-1 的反码补码 - 今天还是要喝水 - 博客园
存储器及地址




总体框架

各个部分分解
1.头文件
头文件是什么?
#include "heads.h"
#include是一个预编译命令,在编译器编译之前,把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。目的是为了共享声明的内容。
通俗地讲就是类似python里面库的导入,导入了之后就可以直接用库里面的东西了。
举个例子:
#include "xc.h"
main()
{unsigned char i,a = 0;
i = a + 2 + b
}
//其中xc.h为下面功能
//extern unsigned char b;
//故总体代码预编译时为:
extern unsigned char b;
main()
{unsigned char i,a = 0;
i = a + 2 + b
}
1). 头文件的扩展名是.h
扩展名就是后缀,比如c,cpp,py,txt等
2). 头文件的内容:
变量声明: extern
宏定义:#define
结构体定义:struct
类型变义: typedef
补充:什么是unsigned?
unsigned是无符号的意思,和signed相反,signed是有符号的意思。
其实C语言中的类型基本上都是有符号类型,只是省去了signed,比如:
(signed)int --> int
(signed char)-->char
在了解什么是无符号之前,我们先了解一下什么是符号位:
在计算机处理二进制数据时,专门规定了一位符号位,来确定数据的正负,这个符号位通常是数据的最高位,如8比特位数据,左边第一位就是符号位,剩下七位用来表示数据大小。
在知道符号位之后就很容易理解无符号了,无符号嘛就是没有符号位,原来的符号位可以列入计算了。值得一提的是,无符号数都是非负数。
补充:变量或函数声明: extern
extern关键字是C语言中的一个修饰符,用于声明全局(外部)变量和函数的引用。该变量(或程序)是一个已经定义的外部变量(或程序)。 有了此声明,就可以从“声明”处起,合法地使用该 外部变量(或程序) 。
它用于告诉编译器,某个全局变量或函数的定义位于其他文件中。extern其实就是一个声明,明确指出一个语句是声明,比如extern int i ;这是声明变量 i,而不是定义i,定义 i 则是int i(声明不开辟内存空间,而定义是要开辟内存空间的)
extern关键字的基本用法:
1.全局变量声明:在文件中使用extern关键字声明一个全局变量,即使该变量在其他文件中定义。
2.函数声明:在文件中使用extern关键字声明一个函数,即使该函数在其他文件中定义
// 文件1
#include <stdio.h>
// 全局变量的定义
int global_var = 10;
// 全局函数的定义
void global_func() {
printf("全局函数被调用\n");
}
// 文件2
#include <stdio.h>
// 使用extern关键字声明全局变量
extern int global_var;
// 使用extern关键字声明全局函数
extern void global_func();
int main() {
printf("全局变量值: %d\n", global_var);
global_func();
return 0;
}
在这个例子中,我们定义了一个全局变量global_var和一个全局函数global_func,它们分别定义在file1.c和file2.c文件中。在file2.c文件中,我们使用extern关键字声明了这两个全局变量和函数。
补充:宏定义:#define
#define WEIGHT 160
WEIGHT是宏名,为了防止与字符串变量混淆,习惯上宏名全为大写
160是宏体,可以是常数,字符串,表达式
在程序编译时,如果编译器遇到宏名,都会用宏定义中的宏体去替换掉宏名
#define A 100
#define B 200
int main()
{
int C = 0;
C = A + B;
printf("C = %d\n", C);
return 0;
}
//C = 100 + 200 = 300
常用宏定义用法
#define MAX 1000 // MAX 的大小定义为 1000
#define reg register //为 register这个关键字,创建一个简短的名字
#define YUANXUE "猪" //YUANXUE定义为"猪"
#define M(y) y+150 //M(y)定义为y+150 M(10)即为160
补充:类型定义: typedef
typedef关键字的作用是为现有的数据类型(int、float、char……)创建一个新的名字,目的是为了使代码方便阅读和理解,常用在结构体换名
typedef int NEW_INT;
以上就是给int起了一个新的名字NEW_INT,注意要加分号。当要定义int类型数据时就可以:
NEW_INT num;
此时NEW_INT num 等同于 int num。
补充:结构体定义:struct
C语言结构体超详解(小白一看就懂,多维度分析!!!!)-优快云博客
【通俗C语言讲解】非常易懂!结构体清晰讲解!_哔哩哔哩_bilibili
定义main函数
每个C语言程序不管有多少行代码,都是从main函数开始执行的,main函数是程序的入口,main 函数也被叫做:主函数。
●main函数是程序的入口
●main函数有且仅有一个
●即使一个项目中有多个.c文件,但是只能有一个main函数(因为程序的入口只能有一个)
main()
{
......
......
}
变量/数组定义
格式: 数据类型 变量/数组 名;
例如: int a / a[3];
注意:
●与 python不同的是C/C++在定义变量/数组是要注明数据类型的
●结尾要加;
●变量/数组名:由字母和数字组成,第一个字符必须是字母
补充:数据类型


补充:数组定义
数组是一组相同类型元素的集合
数组的创建方式:
type_t arr_name [const_n];
//type_t 是指数组的元素类型
//arr_name 是数组的名字
//const_n 是一个常量(不可以是变量)表达式,用来指定数组的大小
//代码1
int arr1[10];
char arr2[10];
float arr3[1];
double arr4[20];
//代码2
//用宏定义的方式
#define X 3
int arr5[X];
//代码3
//错误使用
int count = 10;
int arr6[count];//数组时候可以正常创建?
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)
1.数组大小和数值个数一致
int arr1[5] = {1,2,3,4,5};
2.数组大小大于初始数,不足的自动补0
int arr2[6] = {1,2,3};
3.不指定数组大小,会根据元素个数自动补上大小(4)
int arr3[] = {1,2,3,4};
4.不指定字符数组大小,自动补上(3)
char arr5[] = {'a','b','c'};
C语言中的数组(详解)_c语言数组-优快云博客
补充:共同体定义:union
C语言共用体(C语言union用法)详解_共同体c语言-优快云博客
补充:指针类型:*p
让你不再害怕指针——C指针详解(经典,非常详细)_c语言指针-优快云博客
【通俗C语言讲解】非常易懂!在宿舍教舍友指针实录_哔哩哔哩_bilibili

算术、关系与逻辑运算
1) 算术运算
+ - * / %(取模运算):整数除法中的余数
2) 关系运算, 其值为真或假,分别用1和0表示
> >= < <= == !=
3) 逻辑运算符,其值为真或假,分别用1和0表示
&&(与) ||(或) !(非)
例: (i < 3) && (a >4)
注意:区分优先级


4) 位操作运算符
C语言之位操作符:<<、>>、&、|、^、~,以及原码反码补码和例题详解_<< >>c语言-优快云博客


赋值与空语句
a = 3;
a *= 3; (即a=a*3, 适用于算术运算符+ - * / %)
a <<=3 即a=a<<3 适用于位运算符& | ^ >> <<
a++或++a; (即a=a +1, 适用于自增自减运算符++ , --)
空语句: ;
三种基本程序结构
1) 顺序结构
2) 分支(选择)结构if与switch
3) 循环结构
注意for(;;)与while(1)代表死循环
史上最全C语言中的各种循环结构!!!_c语言循环-优快云博客
C语言中三种循环语句(while,for,do-whlie)的用法及区别_do while语句-优快云博客
1768

被折叠的 条评论
为什么被折叠?



