一、字符和ASCII编码
为了方便大家学习后面知识,我们要学习字符和ASCII值
我们先要有关于字符的基本了解。
在键盘上可以敲出各种字符,如:a,q,@,#
等,这些符号都被称为字符,C语⾔中字符是用单引号括起来的,如:'a','b','@'
。
char c = '@';
我们知道在计算机中所有的数据都是以二进制的形式存储的,那这些字符在内存中分别以什么样的二进制存储的呢?如果我们每个人自己给这些字符中的每个字符编一个二进制序列,这个叫做编码,为了方便大家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了一个标准 ASCII 编码,C语言中的字符就遵循了 ASCII 编码的方式。
简言之,一个字符对应一个ASCII编码
。
当然,关于字符的知识远不仅此,后续将详细解答。
二、字符串与\0
C语言中如何表示字符串呢?使⽤双引号括起来的一串字符就被称为字符串,如:“abcdef”,就是一个字符串。
C语言字符串中一个特殊的知识,就是在字符串的末尾隐藏放着⼀个 \0
字符,这个 \0
字符是字符串的结束标志。
为了检验,我们适应VS2022监视功能,对"abcdef"
的字符串进行监视,如图:
int main()
{
char str[] = "abcdef";
return 0;
}
可见,"abcdef"
的结尾确实有\0
,且ASCII码值为0
三、转义字符
在前面的\0
为什么是字符,大家可能还有些懵懵的😫
其实这是字符中的特殊一类——转义字符,顾名思义,转变原来意思的字符。
举个栗子:
#include<stdio.h>
int main()
{
printf("abcdefnhk");
return 0;
}
毫无疑问,屏幕上打印abcdefnhk
如果将程序改为这样呢?
#include<stdio.h>
int main()
{
printf("abcdef\nhk");
return 0;
}
屏幕上输出:
abcdef
hk
为什么会这样呢?
这就是转义字符的问题, \n
是⼀个转义字符表示换行的意思,我们可以简单的理解为 \
让 n
的意思发生了转变, n
本来是一个普通的字符,被\
转义为换行的意思。
这样神奇的转义字符还有很多:转义字符参考
四、语句
int main()
{
printf("Hello World!");
return 0;
}
通过我们第一个程序,我们很好奇为什么这样写,下面我来简单介绍一下:
C语言的代码是由一条一条的语句构成的,C语言中的语句可为以下四类:
• 空语句
• 表达式语句
• 函数调用语句
• 控制语句
1.空语句
int main()
{
printf("Hello World!");
;//空语句
return 0;
}
一个分号就是一条空语句。空语句,⼀般出现的地方是:这里需要一条语句,但是这个语句不需要做任何事,就可以写一个空语句。
2.表达式语句
int main()
{
int a = 100;//表达式语句
return 0;
}
3.函数调用语句
int Add(int x,int y)
{
return x + y;
}
int main()
{
int a = 100;//表达式语句
int b = 200;
int c = Add(a, b);//函数调用语句
return 0;
}
4.控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。
可分成以下三类:
- 条件判断语句也叫分支语句:if语句、switch语句;
- 循环执行语句:do while语句、while语句、for语句;
- 转向语句:break语句、goto语句、continue语句、return语句。
后期会给大家一一介绍控制语句。
五、注释
注释是对代码的说明
,编译器会忽略注释,也就是说,注释对实际代码没有影响。
注释是给程序员自己,或者其他程序员看的。
好的注释可以帮我们更好的理解代码,但是也不要过度注释,不要写没必要的注释。
有2种形式:
1./**/形式
用法:可以用于多行注释
int main()
{
int a = 100;
/*
注释
注释
...
*/
return 0;
}
注意:
int main()
{
/*
printf("a ");
printf("b ");
printf("c "); /* 注释⼆ */
printf("d ");
*///error
return 0;
}
在这个例子中,第一个/*
与第一个*/
匹配,这样的话,最后一个*/
就会“落单”,从而报错。
2.//形式
第⼆种写法是将注释放在双斜杠 // 后⾯,从双斜杠到行尾都属于注释。这种注释只能是单行,可以放在行首,也可以放在一行语句的结尾。这是C99标准新增的语法
//int Add(int x,int y)
//{
// return x + y;
//}
六、进制
进制,全称为“进位计数制”,是数学和计算机科学中用于表示数字的一种方法。不同的进制系统使用不同数量的符号(或称为基数)来表示数值。最常见的是十进制(base-10),我们日常生活中的计数和数学运算采用十进制。
十进制(base-10):
十进制是最常见的进制,使用10个符号:0, 1, 2, 3, 4, 5, 6, 7, 8, 和 9
。当一个位置上的数达到最大值(9)时,它会进位到下一个更高的位置,同时当前位置重置为0。
二进制(base-2):
二进制在计算机科学中极其重要,因为它直接对应于计算机内部的物理状态——开(1)或关(0)。二进制只使用两个符号:0 和 1
。计算机的底层运算,包括CPU指令集和数据存储,都是基于二进制进行的。
八进制(base-8):
八进制使用8个符号:0, 1, 2, 3, 4, 5, 6, 和 7
。在早期的计算机系统中,八进制曾经很流行,因为早期的字节大小通常是多位的倍数(如6位或9位),而八进制正好能整除这些位数。
十六进制(base-16):
十六进制使用16个符号:0-9 和 A-F
(A代表10,B代表11,以此类推直到F代表15
)。在现代计算机科学中,十六进制特别有用,因为四位二进制数正好可以表示一个十六进制数字,这使得二进制和十六进制之间转换非常方便,从而简化了计算机硬件设计和编程语言中的表示。
比如十进制95,转换如下:
那么各种进制是如何转换的呢?如下图是一些常用的进制转换:
(点个赞吧,制图不易😭
下面是一些例子:
问题:
1.十进制数1000对应二进制数为______,对应八进制数为______,对应十六进制数为______。
2.二进制的1000001相当八进制的______,相当十进制的______,相当十六进制的______。
3.八进制的100化为十进制为______,十六进制的100化为十进制为______。
———————————————————————————————————————————————
答案:
题1:
1111101000
1750
3e8
题2:
101
65
41
题3:
64
256
解析:
第一题:
第二题:
第三题:
七、总结
这样一来,对于C语言学习的入门级知识已经基本了解,可能你在看完文章后还是感觉不理解,这是正常的,因为前提知识的(上)(下)都只是让你有一个认识并不要求你完全掌握,接下来更细致更新,我一定会让你理解的。
如果你没有看过上期的话,我推荐你去阅读一下学习C语言的前提知识(上)
关注我,跟我一起学习C语言!(❤ ω ❤)🎉
完