目录
1、位、字节、字
2、main函数
3、printf和库函数
4、关键字介绍
5、字符和ASCII编码
6、字符串和\0
7、转义字符
8、注释
1. 位、字节、字
- 位(bit):位是计算机存储的最小单位,简记为b,每一位的状态只能是0或1。
- 字节(byte):字节是计算机用于计算存储容量的一种计量单位,1个字节可以存储1个英文字母或者半个汉字。
- 字:字是表示计算机自然数据单位的术语,在某个特定计算机中,字是其用来一次性处理事务的一个固定长度的位(bit)组。
例如:一台8位机,它的1个字就等于1个字节,字长为8位。如果是一台16位机,那么,它的一个字就由2个字节构成,字长为16位。
- 位、字节、字之间的关系
1字 = 2字节 = 16位
1 Byte = 8 bit- 计算机的存储
1 B = 8 bit;
1 KB = 1024B;
1 MB = 1024 KB;
1 GB = 1024 MB;
1 TB = 1024 GB;
2. 原码、反码和补码
- 正数的原码、反码和补码是一样的。
- 对于负数则不同
原码:第一位表示符号位,其余为表示数值。
反码:符号位不变,其余按位取反。
补码:反码加1称为补码。补码=反码+1,反码=补码-1。
1的原码、反码、补码: a = 00000000 00000000 00000000 0000001
~1的补码 b = 11111111 11111111 11111111 11111110
~1的反码 c = b -1 = 11111111 11111111 11111111 11111101
~1的原码 d = 10000000 00000000 00000000 00000010
~1 = -2
0的原码、反码、补码: a = 00000000 00000000 00000000 0000000
~0的补码 b = 11111111 11111111 11111111 11111111
~0的反码 c = b -1 = 11111111 11111111 11111111 11111110
~1的原码 d = 10000000 00000000 00000000 00000001
~0 = -1
3. main函数
每个 C 语言程序不管有多少行代码,都是从 main 函数开始执行的,main 函数是程序的入口,main 函数也被叫做主函数。 main前⾯的 int 表示main 函数执行结束的时候返回⼀个整型类 型的值。所以在main函数的最后写return 0; 正好前后呼应
- main函数是程序的入口
- main函数有且仅有一个
- 即使一个项目中有多个.c文件,但是只能有一个main函数(程序的入口只能有一个)
4. printf和库函数
在下面这段代码中使用了printf函数,实现在屏幕上信息的打印,printf 是⼀个库函数,它的功能是在标准输出设备(⼀般指屏幕)上进行信息的打印。上⾯的代码是使用printf 函数打印字符串。只要把想要打印的⼀串字符放 在双引号中并传递给printf函数就可以打印。
- 使用库函数时,是需要包含头文件的,比如:这段代码中包含的就是stdio.h这个头文件
#include int main(){ /* 我的第一个 C 程序 */ printf("Hello, World! \n");return 0;}
接下来我们讲解一下 上面这段程序:
1. 程序的第一行 #include 是预处理器指令,告诉C编译器在实际编译之前要包含 stdio.h 文件。
2. 下一行 int main() 是主函数,程序从这里开始执行。
3. 下一行/*…*/将会被编译器忽略,这里放置程序的注释内容。它们被称为程序的注释。
4. 下一行 printf(…) 是C中另一个可用的函数,会在屏幕上显示消息 “Hello, World!”。
5. 下一行 return 0; 终止 main() 函数,并返回值0。
5. 关键字介绍
C语言中有⼀批保留的名字的符号,比如:int、if、return,这些符号被称为保留字或者关键字。
- 关键字都有特殊的意义,是保留给C语言使用的
- 自己在创建标识符的时候是不能和关键字重复的
- 关键字也是不能自己创建的。
下表列出C语言关键字:
关键字 | 说明 |
---|---|
auto | 声明自动变量 |
break | 跳出当前循环 |
case | 开关语句分支 |
char | 声明字符型变量或函数返回值类型 |
const | 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变 |
continue | 结束当前循环,开始下一轮循环 |
default | 开关语句中的”其它”分支 |
do | 循环语句的循环体 |
double | 声明双精度浮点型变量或函数返回值类型 |
else | 条件语句否定分支(与 if 连用) |
enum | 声明枚举类型 |
extern | 声明变量或函数是在其它文件或本文件的其他位置定义 |
float | 声明浮点型变量或函数返回值类型 |
for | 一种循环语句 |
goto | 无条件跳转语句 |
if | 条件语句 |
int | 声明整型变量或函数 |
long | 声明长整型变量或函数返回值类型 |
register | 声明寄存器变量 |
return | 子程序返回语句(可以带参数,也可不带参数) |
short | 声明短整型变量或函数 |
signed | 声明有符号类型变量或函数 |
sizeof | 计算数据类型或变量长度(即所占字节数) |
static | 声明静态变量 |
struct | 声明结构体类型 |
switch | 用于开关语句 |
typedef | 用以给数据类型取别名 |
unsigned | 声明无符号类型变量或函数 |
union | 声明共用体类型 |
void | 声明函数无返回值或无参数,声明无类型指针 |
volatile | 说明变量在程序执行中可被隐含地改变 |
while | 循环语句的循环条件 |
C99新增关键字
_Bool | _Complex | _Imaginary | inline | restrict |
C11新增关键字
_Alignas | _Alignof | _Atomic | _Generic | _Noreturn |
_Static_assert | _Thread_local |
6. 字符和ASCII编码
在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语言中字符是用单引号括起来的,如:’a’,’b’,’@’。
我们知道在计算机中所有的数据都是以二进制的形式存储的,那这些字符在内存中分别以什么样的二进制存储的呢?如果我们每个人自己给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为了方便大家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准ASCII编码,C 语言中的字符就遵循了 ASCII 编码的方式。
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字节就可以存储。
下面列出ACSII码表:
- 字符A~Z的ASCII码值从65~90
- 字符a~z的ASCII码值从97~122
- 对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
- 数字字符0~9的ASCII码值从48~57
- 换行\n 的ASCII值是:10
- 在这些字符中ASCII码值从0~31这32个字符是不可打印字符,无法打印在屏幕上观察
7. 字符串和\0
C语言中使用双引号括起来的一串字符就被称为字符串,如:”abcdef”,就是一个字符串。
字符串的打印格式可以使用%s来指定,也可以直接打印。如下:
#include int main(){ printf("%s\n", "hello C"); printf("hello c"); return 0;}
对于字符串”abcdef”,我们实际上看到了6个字符:a,b,c,d,e,f,但是实际上在末尾还隐藏⼀个 \0 的 转义字符, \0 是字符串的结束标志。所以我们在使用库函数 printf() 打印字符串或者strlen() 计算字符串长度的时候,遇到 \0 的时候就自动停止了。如果数组中存放一个一个的字符而没有\0作为结束标志,就会在正常打印之后再打印一些随机值。
8. 转义字符
在字符中有一种特殊的字符就是转义字符,前面看到的\n、\0都是转义字符。
转义字符(Escape Character)是指在ASCII码和Unicode等字符集中的无法被键盘录入的字符、被当作特殊用途而需要转换回它原来的意义的字符。而转义字符的转义是指字符已经被转换了意义。
C语言中一些常用的转义字符,如下:
- \” />
- \\:表示一个反斜杠,防止被解释为一个转义序列符
- \a:警报
- \b:退格键,光标回退一个字符,但不删除字符
- \f:换页符,光标移到下一页
- \n:换行符
- \r:回车符,光标移到本行的开头
- \t:制表符,光标移到下一个水平制表位(跳到下一个tab位置)
- \v:垂直分隔符,光标移到下一个垂直制表位
- \ddd:1到3位八进制数所代表的任意字符,如\130 查ASCII码表八进制数130表示字符X
- \xhh:十六进制所代表的任意字符,如\x30查ASCII码表十六进制数30表示字符0
9. 注释
C语言中有两种注释方法
- 第一种是将注释放在/**/之间,内部可以换行,这种注释可以插在行内,记得*/结束符号
- 第二种写法是将注释放在双斜杠//后面,从双斜杠开始到行尾都属于注释,但只能单行
无论哪种注释都不要放在双引号里,双引号里的注释符号会成为字符串的一部分