深入理解c语言(符号)

文章目录

    • 注释符号
    • 续接符与转义符
    • 单引号与双引号
    • ASCII码
    • 位运算
    • ++运算
    • 取整

注释符号

注释的本质是将注释内容替换成空格。c90的注释不支持嵌套,从/*开始到最近的 */之间的内容是被注释的。

续接符与转义符

\反斜杠

if (a == 1 &&\
    b == 2)

续接符增加代码的可读性,续接符后不能带空格,任何符号都不能。
深入理解c语言(符号)_第1张图片
1.续接 2.转义,将字面转特殊,特殊转字面

回车与换行,常说的回车其实是回车加上换行,回车是回到当前行的最开始,换行是换到下一行。\r表示回车,\n表示换行加回车
深入理解c语言(符号)_第2张图片
用上\r就能做出旋转的效果。

单引号与双引号

语法规定,单引号的常量占四个字节深入理解c语言(符号)_第3张图片
深入理解c语言(符号)_第4张图片
单引号的常量有四个字节,一个字符占一个字节,小端存储,低权值位的c放在低地址,而a拿到的数据是存储在低地址中的

‘a’叫做“整形字符常量”,被看作int类型。

ASCII码

计算机只认识二进制,二进制对人来说阅读成本高,我们习惯阅读字符,ASCII码表就是一种映射,将计算机中的二进制映射成字符,方便阅读。

位运算

深入理解c语言(符号)_第5张图片
深入理解c语言(符号)_第6张图片
用加法交换两数的值会导致溢出的问题,使用异或运算。左边是a,b,a右边是a,b

cpu负责运算数据,但是数据存储在内存中,需要将变量移动到cpu中的寄存器中。寄存器的大小固定,所以左移与右移时一些数据会溢出,在将数据存储到内存中时,会发生截断。

逻辑右移:高位补0,无符号数与正数都是逻辑右移
算数右移:根据符号位补位,负数都是算术右移。
深入理解c语言(符号)_第7张图片
由于cpu负责计算,32位机器下cpu中的寄存器是32bit,但char类型只有8字节,在运算时需要整形提升。

++运算

深入理解c语言(符号)_第8张图片
在++运算后没有接收方时,就只完成自增的过程。对应汇编中的三行代码,有接收方时,也只是多了两行代码,先后将右值给接收方的情况。

由++这样的操作符引起的二义性表达式,计算路径不唯一的问题,编译器在识别内容时,遵守贪心规则,即从左向右能将符号连接成运算符时,尽量将它们识别成一个符号。

取整

给小数取整分四种取整方式

1.round四舍五入
2.floor向负无穷取整
3.ceil向正无穷取整
4.trunc向0取整

vs默认向0取整,在math头文件中有这四个函数。

在c语言中,-10 / 3的结果是-3,-3.333向0取整得到-3,余数是-1。python中向负无穷取整,得到-4,余数是2。

余数的不同是由于商的不同,商的不同本质上又是取整规则的不同。c语言中,商的取整向0,这种方式算余数叫做取余。

而商向负无穷取整,算出余数是取模运算。

当两数同符号,算出的商是正数,取模等价于取余,不同符号则不等价。

总之,在向0取整的语言中,余数的符号与被除数一样。

你可能感兴趣的:(【C语言】学习总结,c语言,开发语言,后端)