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

本文深入探讨了C语言中的注释规则,包括多行注释和单行注释的使用,以及"""的续航和转意作用。同时,解释了回车与换行的区别,字符在内存中的存储以及printf和scanf的格式化输入输出。此外,还讲解了逻辑运算符的短路特性,并介绍了位运算的应用,如设置比特位、显示和清除比特位。
摘要由CSDN通过智能技术生成

目录

符号

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 << 和 >>

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

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

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

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

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

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

下期见哈!!!   

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原来45

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值