C语言:符号

一.注释符号

1.例如

(A)/* ...*/i;
(B)char *s ="abcdefgh      //hijkmn";
(C)//Is it a\
valid comment?
(D)in/*  ...*/t  i;

A,B,C 的注释都是正确的,A中编译器会将注释剔除,都是不是简单的剔除 ,而是用空格代替原来的注释,也因为如此D错误;B中用双引号括起来的是字符常量,那 双斜杆也不例外;C中\是一个接续符。

2.接续符和转义

\n回车换行
\t横向跳到下一制表位置
\v竖向跳格
\b退格
\f走纸换页
\反斜杆符
\‘单引号符
\a鸣铃
\ddd1~3位八进制所代表的字符
\xhh1~2位十六进制所代表的字符

3.单引号与双引号

双引号扣起来、括起来的是字符串常量,单引号括起来的是字符常量。

例如:1,‘1’,“1”

第一个是整型常数;32位系统下占4字节
第二个是字符常量,占一个字节
第三个是字符串常量,占两个字节

4.逻辑运算符

||两边的条件只要有一个为真,则结果为真,&&两边的条件只要有一个为假,则结果为假。

5.位运算符

有一下相关规定:
(1)位运算符不能用于基本类型是有符号的操作数
(2)一元减运算符不能用在基本类型无符号的表达式上,除非在使用之前对两个操作数进行大小判断,且被减数大于减数。

6.左移和右移

左移运算符(<<)其功能是:把<<左边的运算数的各二进位全部左移若干位,由<<右边的数指定移动的位数,高位丢弃,低位补1。
右移运算符(>>)其功能是:把>>右边的运算数的各二进位全部右移若干位,由<<右边的数指定移动的位数,但是要注意的是:对于有符号数,在右移时,符号位将随同移动,当为正数时,最高位补0,为负数时。符号位为1,最高位是补0还是补1取决于编译系统决定。

7.++,–

例1:

int i = 3;
(++i)+(++i)+(++i);

有的编译器计算出来是18 ,因为i经过3次自加后变为6,然后3个6相加得18;而有道编译器计算出来为16,因为先计算前两个i的和,这时候i自加两次,1个i的和为10;然后再加上第3次自加的i得16。

例2

(1)j=(i++,i++,i++);
(2)for(i=0;i<10;i++)
     {
  		//code
     }
(3)k=(i++)+(i++)+(i++);

(1)为逗号表达式,i遇到每个逗号后,认为本计算单已经结束,i这时候自加。
(2)例子中i与10进行比较之后,认为本计算单位已经结束,I这时候自加
(3)i遇到分号才认为本计算已经结束,i这时候自加

二.运算符的优先级
1.优先级表
在这里插入图片描述

2.一些容易出现错误的优先级问题
(1). 的优先级高于 *
例如: *p.f :对p取f偏移,作为指针,然后进行指针解引用操作。

(2) [ ] 高于 *
例如:int *ap[ ] ; :ap是一个元素为int指针的数组。

(3)函数()高于 *
例如: int * fp; :fp是一个函数,返回int *。

(4)== 和 !=高于位操作
例如:(val & mask ! =0) :实际结果是;val &(mask != 0)

(5)== 和!= 高于赋值符
例如:c = getchar() != EOF 实际结果是:c=(getchar() !=EOF)

(6)算术运算符高于位移运算符
例如:msb <<4+lsb 实际结果为:msb <<(4+lsb)

(7)逗号运算符在所有运算符中优先级最低
例如:i=1,2;实际结果为:(i=0),2

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值