《C语言深度解培》读书笔记之二

本文详细探讨了C语言中的注释、接续符与转义符、逻辑与位运算符、左移与右移操作以及易错的++、--操作符。强调了在编程时理解符号多重含义和正确使用运算符的重要性,建议通过实际编译调试来加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



C语言的基本符号就有20多个,每个符号可能同时具有多重含义,而且这些符号之间相互结合又使得C语言中的符号变得更加复杂起来。

注释

C语言的注释可以出现在程序的任何地方,这句话对不对?

	int/**/n;
	char *s="abcd //hgjkeife";
	//is it a \
	valid comment
	in/**/t i;

前三条注释都正确,第四条不正确。

第一条:编译器会将注释剔除,而不是简单的剔除,而是用空格来代替原来的注释。不用担心解析成intn

第二条:双绰号括起来的都是字符串常量,双斜杠也不例外。

第三条:合法的注释,编译器会有警告提示:warning C4010: 单行注释包含行继续符

第四条:不合法。注释会用空格进行替换。

y=x/*p;
编译器会把/*当成注释的开始,而不会当成*p。修改成y=x/ *p; 则可

也就是说只要斜杠(/)和星号(*)之前没有空格,都会被当成注释的开始。
注释代码段时应注重“为何做(why)”而不是“怎么做(how)”

接续符和转义符

C语言里以斜杠(\)表示断行。编译器会被反斜杠剔除,跟在反斜杠后面的字符自动接续到前一行。

注意:反斜杠后面不能有空格,反斜杠的下一行之前也不能有空格。

下面是几个特例

/\
/这是一条简单的合法的单行注释

cha\
r *ss="这是一个合法的\\
n字符串";

#def\
ine MAC\
RO	这是一条合法的\
宏定义

反斜杠除了可以被用作接续符,还能被用作转义字符的开始标识。

单引号、双引号

1 ‘1’和“1”

第一个是整型常数,32位系统下占4个字节。

第二个是字符常量,占1个字节。

第三个是字符串常量,占2个字节。

字符在内存里是按ascii码存储的,所以字符常量可以与整型常量或变量进行运算。‘A’+1

逻辑运算符

! &&  ||

位运算符 

C中位运算符包括以下几种:

&按位与

|按位或

^按位异或

~取反

<<左移

>>右移

注意:逻辑运算符&&  ||  和位运算符 & | 的区别,不要混淆。

其中按位异或可实现不用第三个临时变量交换两个变量的值。

a^=b;b^=a;a^=b;

左移运算符<<:双目运算符。其功能把“<<”左边的运算数的各个二进制位全部向左移动若干位,由“<<”右边的数指定移动的位数。高位丢弃,低位补0.

右移运算符>>:双目运算符。其功能是把“>>”左边的运算数的各个二进制位全部向右移动若干位,由“>>”右边的数指定移动的位数。但注意:对于有符号数,在向右移时,符号位随同移动,当为正数时,最高位补0,当为负数时,符号位为1,最高位是补0还是补1取决于编译系统的规定。

用最有效率的方法算出2*8=?

0x01<<2+3  ;

结果是32.因为“+”号的优先级高,

改成 0x01<<2+30;  或  0x01<<2-3;

这样行嘛,不行。一个整型长度为32位,左移32会造成溢出,左移-1位?也不行。

左移和右移的位数是有讲究的,左移和右移的位数不能大于数据的长度,不能小于0.

花括号 

花括号为了把一些语句或代码打个包包起来,使之形成一个整体,并与外界绝缘。

++、--操作符

后缀运算符在本计算单位计算结束后再自加或自减。

h=(i++,i++,i++);       //在遇到逗号时才自加。   h=2,i=3

h=(i++)+(i++)+(i++);   //在遇到分号时才自加。   h=0,i=3

贪心法

运算符的优先级




这些容易出错的情况,一定要在编译器上多调试调试,这样印象会深一些,光靠看代码,水平是很难提上来的,调试代码是最长水平的。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值