c 语言所有符号,c语言 符号

c语言基本符号:

0818b9ca8b590ca3270a3433284dd417.png

先看几条有关注释的语句:

int/*...*/i; 和in/*…*/t i; 到底哪一条是对的?

我们一般用的注释符号是/*...*/ 和//

/*...*/  注释部分其实就相当于一个空格

下面就可以解释了 int/*...*/i  就是 int  i;

而in/*...*/t i 就表示为in t i显然没有in t这种类型 即它是错误的。

在看这么一条语句

/*这是*/#/*一条*/define/*合法的*/ID/*预处理*/replacement/*指*/list/*令*/

不看注释 其实就是 # define IDreplacement list

找出这条语句的问题:

y = x/*p

编译器认为 是 y = x(/*)p 把/*当成是一个注释符 而不是 x/(*p) 。 /*把p给注释掉一直等待(*/)符号

要改的话 有两种:

1   y = x/  *p

2  y = x/ (*p)

也就是说只要斜杠(/)和星号(*)之间没有空格,都会被当作注释的开始

接续符和转义符:

C 语言里以反斜杠(\)表示断行。编译器会将反斜杠剔除掉,跟在反斜杠后面的字符

自动接续到前一行。但是注意:反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格

例如 cout<

++ hard!";

则 输出 cout<

转义字符'\' 意思是将反斜杠(\)后面的字符转换成另外的意义。

如 '\n'中的字母"n"不代表n而作为换行符。

例如 '\101' 代表8进制数形式ASCII码101代表的字符

即101 化为8进制为 001 000 001 十进制数就是65 即代表字符"A"。

'\012'  012 的八进制为000 001 010十进制的10代表 "换行"

再比如 '\a'  a的ASCII码为97  97化为八进制数为000 111 即为ASCII码的7  因为八进制最大数为7 所以9的八进制为0.

\ddd 1~3 位八进制数所代表的字符

\xhh 1~2 位十六进制数所代表的字符

广义地讲,C 语言字符集中的任何一个字符均可用转义字符来表示。表中的\ddd 和\xhh

正是为此而提出的。ddd 和hh 分别为八进制和十六进制的ASCII 代码。如\102 表示字母"B",

\134 表示反斜线,\X0A 表示换行等。

单引号、双引号

双引号引起来的都是字符串常量,单引号引起来的都是字符常量

比如:‘a’和“a”完全不一样,在内存里前者占1 个byte,后者占2

个byte。 因为 'a'表示字符为1个字节 肯定是的 "a"是个字符串 包括'\0'所以多一个字节

逻辑运算符

||和&&是我们经常用到的逻辑运算符,与按位运算符|和&是两码事

int i=0;

int j=0;

if((++i>0)||(++j>0))

{

//打印出i 和j 的值。

}

结果:i=1;j=0。

逻辑运算符||两边的条件只要有一个为真,其结果就为真;只要有一个结果

为假,其结果就为假。if((++i>0)||(++j>0))语句中,先计算(++i>0),发现其结果为真,后面

的(++j>0)便不再计算。

位运算符

C 语言中位运算包括下面几种:

& 按位与

| 按位或

^ 按位异或

~ 取反

<< 左移

>> 右移

左移运算符“<

位,由“<

右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若

干位,“>>”右边的数指定移动的位数。但注意:对于有符号数,在右移时,符号位将随同

移动。当为正数时, 最高位补0;而为负数时,符号位为1

例如:

0x01<<2+3; 是多少?

此处要考虑优先级的问题

“+”号的优先级比移位运算符的优先级高

所以此处答案应该是32 就是0x01<<5就变成了0010 0000

++、--操作符

这两个符号我开始学的时候也搞不清楚,现在基本上理解了。

#include

#include

int main(void)

{

int i = 3;

int j ;

int m;

j = i++;

m = ++i;

printf("j = %d\n",j);

printf("m = %d\n",m);

return 0;

}

可能咋一看觉得是打印 3和4 但是结果却是

j = 3

m = 5

原因很简单  j = i++; 是先使用i然后再加加 当把i的值赋给j以后 i再加1变为了4。

然后 m = ++i; 是先加1后使用此时 i加1为5 把5赋给了m m就等于5。

在看三个例子:

A),j =(i++,i++,i++);

B),for(i=0;i<10;i++)

{

//code

}

C),k = (i++)+ (i++)+ (i++);

A) 例子为逗号表达式,i 在遇到每个逗号后,认为本计算单位已经结束,i 这时候自加。

关于逗号表达式与“++”或“--”的连用,还有一个比较好的例子:

int x;

int i = 3;

x = (++i, i++, i+10);

问x 的值为多少?i 的值为多少?

按照上面的讲解,可以很清楚的知道,逗号表达式中,i 在遇到每个逗号后,认为本计算

单位已经结束,i 这时候自加。所以,本例子计算完后,i的值为5,x的值为15。

B) 例子i 与10 进行比较之后,认为本计算单位已经结束,i 这时候自加。

C) 例子i 遇到分号才认为本计算单位已经结束,i 这时候自加。

1、3/(-2)的值是多少?

2、3%(-2)的值是多少?

3、-3%(-2)的值是多少?

4、(-3)%(2)的值是多少?

第一个除法好回答 肯定是-1,至于后面关于求余运算也是一样的吗?

上机试了答案是

1

-1

1

有结果分析求余运算后的符号跟被除数的符号相同。掌握了这点就不会出错了。不信可以多试几个。

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

.的优先级高于*  *p.f

对p 取f 偏移,作为

指针,然后进行解除

引用操作。*(p.f)

[]高于*    int *ap[]

ap 是个元素为int

指针的数组

int *(ap[])   其实这就是数组指针。

函数()高于*  int *fp()

fp 是个函数,返回

int *

int *(fp())    其实就是函数指针。

== 和!=高于赋值符

c = getchar() !=EOF

正确解释是这样

c = (getchar() !=EOF)

所以这个地方我们通常要加()

(c = getchar()) !=EOF

逗号运算符在所有运算符中优先级最低

i = 1,2

正确解释:

(i = 1),2

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值