目录
2.2 打印出来d,为什么呢?超过四个元素就会报错,又为什么呢?
本章节文章是作者通过观看《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 << 和 >>
即补什么取决于自身的类型,和内部保存的数据无关。
今天的内容就到这里了哈!!!
要是认为作者有一点帮助你的话!
就来一个点赞加关注吧!!!当然订阅是更是求之不得!
最后的最后谢谢大家的观看!!!
你们的支持是作者写作的最大动力!!!
下期见哈!!!