c语言符号深度理解和再认识( 二 )


回车和换行并不是一回事,回车就是光标回到当前行的开始,换行就是光标换到下一行 。
了解了这,我们就知道我们按下键盘enter键的时候其实是回车换行或者说换行回车 。
1.旋转符号例子
#include int main(){int i = 0;const char *c = "|/-\\";while (1){i %= 4; printf("[%c]\r", c[i]);//\r是回车i++;Sleep(200);}return 0;}
2.倒计时例子
#include int main(){int i = 10;for (; i >= 0; i--){printf("[%2d]\r", i);Sleep(500);}return 0;}
三、单引号和双引号 (一)、介绍
单引号是字符,双引号是字符串 。
"abcd";//ok"a";//ok"";//ok'abcd';//ok'a';//ok'';//err 报错原因是单引号中必须要有至少一个字符
上面我们对’abcd’这个语法看上去肯定很陌生,不应该单引号中只能有一个字符吗,为什么有四个字符并没有报错呢,还有一个有意思的,看代码:
#include int main(){char c = 'a';//okchar a = 'ab';//okchar v = 'abc';//okchar x = 'abcd';//okchar y = 'abcde';//errreturn 0;}
超出了四个字符就会报错,提示常量中字符太多 。
下面我们用关键字来理解单引号和双引号 。
第一个中是1这个整型;第二个是字符串(含有\0);第三个按常理来说应该是字符1,打印出四个空间的大小,不可思议;第四个是字符打印出一个空间,没问题 。
原因在于,c99的标准规定,'a’叫做整型字符常量,别看成是int类型 。
这样们再来看第三个就很简单了,来看第四个,?为什么是1个空间,原因就是本来是int类型的,但是c是char类型,当int类型转化为char类型时,存储会发生截断 。所以是1个空间的大小 。
(二)、补充
#include int main(){char c = 'abcd';printf("%d\n",c);return 0;}
输出结果是d,这里’a’是int类型,为什么输出d?就和大小端有关系,暂且不做研究 。
四、为什么计算机需要ASCII (一)、初步认识
计算机中只认识二进制,为了解决人的问题,人不擅长二进制,只认识语言文字,所以在数据传在显示器上也不可能是二进制,对应的是我们认识的文字,所以每个二进制对应的就有大众认识的文字,这就是映射关系,ASCII码表对应的就是映射关系 。(映射是由显卡完成的)
(二)、ASCII表
注意:A-a=32,空格十进制数对应的是32 。
五、逻辑运算符
前提非零为真,零为假 。
(一)、 逻辑与符号 (&&)
&逻辑与就是两个或者多个表达式必须同时为真的时候,结果才为真 。
【c语言符号深度理解和再认识】用一个实例说明:
#include int main(){int i = 0;int j = 0;if ((++i > 0) && (++j > 0)){printf("yes!\n");}printf("%d,%d", i, j);return 0;}//输出结果是yes! 1,1
(二)、逻辑或符号 (||)
逻辑或就是两个或多个表达式,必须至少一个为真,结果才为真 。
int main(){int i = 0;int j = 0;if ((++i > 0) || (++j > 0)){printf("yes!\n");}printf("%d,%d", i, j);return 0;}//输出结果是yes! 1,0
这段代码,我们发现表达式中只执行了前面的(++i>0)并没有执行后面是(++j>0),这种情况我们叫短路 。
(三)、短路问题
#include int show(){printf("yes!\n");return 1;}int main(){int flag = 0;scanf("%d", &flag); flag || show();}输入0后打印出yes!