ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《C语言深度剖析》第二章 符号详解 p1 C语言从入门到入土(进阶篇)

2021-12-14 10:03:33  阅读:151  来源: 互联网

标签:字符 p1 int C语言 1111 进阶篇 printf include 回车


目录

符号

1. 注释符号

1.1基本注释注意事项

1.2 y=x/*p

1.3 注释的基本要求(原文)

1.4 “\” 的2种作用

1.4.1 续航作用

 1.4.2 转意作用

2. \r vs \n

2.1 问:回车和换行是一样的吗?是什么?

2.2 打印出来d,为什么呢?超过四个元素就会报错,又为什么呢? 

2.3 为什么等于4呢?

2.4 为何计算机需要字符

2.5 printf scanf格式化输入输出的补充

3. &&  和  ||

3.1 短路

4. 位运算

4.1 设置指定比特位为1

4.2  显示int的所有比特位

4.3 将指定比特位清0

补充:一个整型提升的问题

 4.4 << 和 >>


本章节文章是作者通过观看《C语言深度剖析》等各种资料总结的精华,基础部分省略了不少,是为了让大家能够更加深入了解C语言的魅力!因为为了避免与之前的文章发生赘述,所以就直接讲作者认为的精华部分哈!现在正文开始! 

 谁都不能阻挡你成为更优秀的人。  

符号

1. 注释符号

1.1基本注释注意事项

#include <stdio.h> #include <windows.h> int main () { int /* */ i ; // 正确 char * s = "abcdefgh //hijklmn" ; // 正确 //Is it a\ valid comment ? // 正确 in /* */ t j ; // 报错 system ( "pause" ); return 0 ; } 注意:注释被替换,本质是替换成空格

 左边是源代码,右边是预处理后 

/* 这是 */ # /* 一条 */ define /* 合法的 */ ID /* 预处理 */ replacement /* 指 */ list /* 令 */ vs /* 这是 */ int /* 一条 */ abcd /* 合法的 */ efg /* 预处理 */ replacement /* 指 */ list /* 令 */

//C 风格注释无法嵌套 #include <stdio.h> #include <windows.h> int main () { /* /*printf("hello world"); printf("hello world");*/ */ system ( "pause" ); return 0 ; } /* 总是与离它最近的 */ 匹配

1.2 y=x/*p

1.3 注释的基本要求(原文)

 这是补充的【2——17】条件编译,这个可以自己练习。

或者:这是判断 if 后面是否为真,真就编译。但是这个非常不推荐。

1.4 “\” 的2种作用

1.4.1 续航作用

太长了就可以这么写,是一样的。(续航作用)

注意可以在续航符前面加上空格但是后面不可以。(回车换行也可以,但是这样能更好让别人理解)

 1.4.2 转意作用

C 中,有一些字符,就是他的字面意思,比如 'n' , 'b' , 't' 。 也有一些字符,本身就是特殊含义的,比如: " , ', \ 转义的本质含义是:字面转特殊,或者特殊转字面

1.1 字面转特殊:想输出‘’(我只想得到字面上的‘’就可以用反斜杠转意)

 1.2 特殊转字面:这里是字面的n去显示,但是我们想要n字符对应特殊字符,就可以加上\变成换行符。

2. \r vs \n

2.1 问:回车和换行是一样的吗?是什么?

不一样。回车是指光标回到当前行的最开始。

              换行是指光标移动至下一行。

我们一般讲的“回车”其实是回车加上换行。

在我们计算机语言中\n其实也是回车兼换行,想单独用回车就用\r就可以了。

2.2 打印出来d,为什么呢?超过四个元素就会报错,又为什么呢? 

2.3 为什么等于4呢?

发现linux也是这样的? 

//单引号是字符,双引号是字符串
#include <stdio.h>
#include <windows.h>
//不同编译器,会有细微的差别
int main()
{
        printf("%d\n", sizeof(1));
        printf("%d\n", sizeof("1"));
//C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型
        printf("%d\n", sizeof('1'));
        char c = '1';
        printf("%d\n", sizeof(c));
        system("pause");
        return 0;
}

在C语言中:char类型一个字节是没有错的,但是单引号1或者a是占4个字节,只是说我们一直是把一个整型的大小放进了char里面(赋值发生了截断)。也回应了我们之前说的,字符类型也就是整型。(C++是一个字节) 

但是在“”中,大小就是按一个字节算的。

然后再回到之前的问题:为什么总是拿最后一个字符? 

 因为我们刚刚说到了,单引号里面是四个字节空间大小的,然后我们要放进char(一个字节空间大小)里面,就发生截断然后根据我们的大小端(这里都是小端),所以就拿低地位的数据即最后一个数据。

总结说:我们单引号括起来的字符在C语言是占4个字节的,但是放到char里面就会截断为1个字节。 

2.4 为何计算机需要字符

计算机本质只认识二进制,那么计算机为何需要字符呢?直接全部二进制不香吗? 因为计算机是为了解决人的问题,可是,人怎么知道计算机解决了人的问题??你输出二进制结果,人能直接看懂吗? 所以,为何计算机需要需要字符,本质是为了让人能看懂。 那为什么又是英文的呢 ? 中文不香吗? 最早的计算机是美国人发明的,他们的语言是英语,大家想想,英语,不就是 26 个英文字母 + 一大堆标点符号组成的吗? 另外,计算机刚刚开始发明,人美国人只要能解决他们的问题就行,所以就有了现在的简单字符 计算机只认识二进制,而人只认识字符。所以,一定要有一套规则,用来进行二进制和字符的转化,这个就叫做 ASCII 码表

2.5 printf scanf格式化输入输出的补充

printf 格式化输出:就是把整型数据输出到显示器中,按字符的形式。

scanf 格式化输入:特定数据(字符)变成整数(%d),这就是格式成你想要保存到内存中想要显示的数据。

 

这是字符0

只有‘\0’才是真正的0。

3. &&  和  ||

3.1 短路

上面的一个条件不满足,已经不需要在看后续的条件的情况,就叫做短路

 注意:计算机都是从左向右扫描的。

4. 位运算

位运算符有: &(按位与) |(按位或)^(按位异或) ~(按位反,包括符号位) 

提一下:

打印出来就是-1。 

交换两个整数(之前文章详细说过这里就只再提一下)
#include <stdio.h>
#include <windows.h>
int main()
{
int x = 10;
int y = 20;
printf("before: %d,%d\n", x, y);
x ^= y;
y ^= x;
x ^= y;
printf("after: %d,%d\n", x, y);
system("pause");
return 0;
}

4.1 设置指定比特位为1

4.2  显示int的所有比特位

4.3 将指定比特位清0

例如将第6位清0:1001 0110 1011 1000 1111 1000 0111 1000

我们就需要 &= : 1111 1111 1111 1111 1111 1111 1101 1111

那怎么得到上面的数? 那就是:~(1<<(n-1))

补充:一个整型提升的问题

也就是说sizeof并不是在程序运算的时候计算的。

并且运算的时候会将数据进行基本的整型提升。

 4.4 << 和 >>

 即补什么取决于自身的类型,和内部保存的数据无关。 

今天的内容就到这里了哈!!!

要是认为作者有一点帮助你的话!

就来一个点赞加关注吧!!!当然订阅是更是求之不得!

最后的最后谢谢大家的观看!!!

你们的支持是作者写作的最大动力!!!

下期见哈!!!   

标签:字符,p1,int,C语言,1111,进阶篇,printf,include,回车
来源: https://blog.csdn.net/weixin_62700590/article/details/121902764

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有