C语言深度解剖笔记3之符号

接续符和转义符

C 语言里以反斜杠(\)表示断行。编译器会将反斜杠剔除掉,跟在反斜杠后面的字符自动接续到前一行。但是注意:反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格,反斜杠除了可以被用作接续符,还能被用作转义字符的开始标识,比如\n 回车换行
\t 横向跳到下一制表位置。

单引号、双引号

双引号引起来的都是字符串常量,单引号引起来的都是字符常量,字符串本质上是多个字符组成的字符数组,C语言规定,在每一个字符串常量的结尾,系统都会自动加一个字符'\0'作为该字符串的“结束标志符”,系统据此判断字符串是否结束,比如‘a’和“a”在内存中,前者占一个字节,后者占2个字节。字符在内存里是以ASCAII 码存储的,所以字符常量可以与整形常量或变量进行运算。
如:‘A‘ + 1。

逻辑运算符

||逻辑或,这个需要注意的是在这个运算符的左边的值为真时,右边的运算就不执行了,如if(++i)||(++j),先计算(++i),发现其结果为真,后面的(++j)便不再计算。同样&&运算符也要注意这种情况.

位运算符

主要注意按位运算符|和&与逻辑运算符||和&&的区别,按位异或操作可以实现不用第三个临时变量交换两个变量的值:
a ^= b; b ^= a;a ^= b;但并不推荐这么做,因为这样的代码读起来很费劲,还有一种不用第三个变量的方法是a=a+b;b=a-b,a=a-b;

左移和右移

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

右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0;而为负数时,符号位为1,最高位是补0 或是补1 取决
于编译系统的规定。Turbo C 和很多系统规定为补1。

左移和右移的位数不能大于数据的长度(防止溢出),不能小于0。

再来看一个例子:

0x01<<2+3;因为“+”号的优先级比移位运算符的优先级高。结果是32.

关于a+++b的理解,这个可以设计到c语言中的一个处理字符串的方法--贪心法。贪心法主要说的是一个字符串从左到右一个一个字符的读入的过程中。尽可能的将能组成一个符号的字符串放到一块。直到读入的字符串已不再可能组成一个有意义的符号。少所以a+++b就是a++ +b;

运算符的优先级:

C语言常用运算符的优先级口诀是:“单算关逻条赋逗”;
如果加入位运算符,完整口诀是:“单算移关与,异或逻条赋”。
“单”表示单目运算符:逻辑非(!),按位取反(~),自增(++),自减(--),取地址(&),取值(*);
“算”表示算术运算符:乘、除和求余(*,/,%)级别高于加减(+,-);
“移”表示按位左移(<<)和位右移(>>);
“关”表示关系运算符:大小关系(>,>=,<,<=)级别高于相等不相等关系(==,!=);
“与”表示按位与(&);
“异”表示按位异或(^);
“或”表示按位或(|);
“逻”表示逻辑运算符:逻辑与(&&)级别高于逻辑或(||);
“条”表示条件运算符(? :);
“赋”表示赋值运算符(=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=, |=,!=);
另,逗号运算符(,) 级别最低,口诀中没有表述,需另加记忆...

此外还有一些c++里面加入的运算符没被写入。

一些容易出错的优先级问题

"."的优先级高于*,"."是c++中的成员选择(对象)符号,如表达式*p.f,这个的实际结果是对p 取f 偏移,作为指针,然后进行解除引用操作。实际是*(p.f)。

[ ]高于*,如int *ap[],ap 是个元素为int指针的数组int *(ap[])。

函数()高于*,int *fp(),fp 是个函数,返回int *,实际是int *(fp())

== 和!=高于位操作,(val & mask != 0)val & (mask != 0)

== 和!=高于赋值符。c = getchar() !=EOFc = (getchar() !=EOF)

算术运算符高于位移运算符,msb << 4 + lsbmsb << (4 + lsb)

逗号运算符在所有运算符中优先级最低,i = 1,2实际上是(i = 1),2

在C 语言里,赋值符号“=”号两边的数据类型必须是相同的,如果不同需要显示或隐式的类型转换。

C 语言引入一个术语-----“可修改的左值”。意思就是,出现在赋值符左边的符号所代
表的地址上的内容一定是可以被修改的。换句话说,就是我们只能给非只读变量赋值
。这个在vs2013等编译器中可以看到

猜你喜欢

转载自blog.csdn.net/woainilixuhao/article/details/86548577