c语言中的符号总结,C语言中的符号总结

1、注释符号                     //和/* ...*/

2、续行符号                     \

3、转义符号                    常用:\r 和 \n 等

902f2ebcc93726f00377fd268d1df06d.png

4、单引号      ‘    括起来的一个字符代表整数

5、双引号      “     括起来的字符代表一个指针

单引号 ‘ 括起来的一个字符代表整数,双引号 “ 括起来的字符代表一个指针。所以虽然C编译器接受字符和字符串的比较,可意义是错误的,C编译器允许字符串对字符变量赋值,其意义是可笑的。

6、逻辑运算符:&&    ||    !

(1)逻辑与 && 和逻辑或 || 在程序中的短路规则:

&& 从左向右开始计算,当遇到为假的条件时停止计算,整个表达式为假,所有条件为真时表达式才为真。

||  从左向右开始计算,当遇到为真的条件时停止计算,整个表达式为真,所有条件为假时表达式才为假。

经典案例,如下所示,打印结果为1,0。如果将第六行改为 if(++i>0 && ++j>0)打印结果1,1。

1 #include

2 intmain()3 {4 int i = 0;5 int j = 0;6 if( ++i > 0 || ++j > 0)7 {8 printf("%d\n", i);9 printf("%d\n", j);10 }11 return 0;12 }

(2)逻辑非

!0 = 1      !1 = 0      !100 = 0      !-1000 = 0

7、三目运算符         (a?b:c)

(1)三目运算符可以看做是逻辑运算符的载体

(2)规则:当a为真的时候,返回b的值,否则,返回c的值。

8、位运算符            &      |      ^      ~      <>

按位与,按位或,按位异或,按位取反,左移,右移是位运算中常用的符号。

左移:高位丢弃,低位补0。

右移:低位丢弃,高位补符号位。(注意高位不是补0)

1 void test(void)2 {3 int a=-8;4 a=a>>3;5 printf("%d\n",a); //结果:-1

6 }7 void test1(void)8 {9 int a=8;10 a=a>>3;11 printf("%d\n",a); //结果:1

12 }

小技巧:左移n位相当于乘以2的n次方,但效率比数学运算符高。右移n位相当于除以2的n次方,但效率比数学运算符高。

异或:异或是一个很强大的符号,之前交换两个数的位置就见识到了。此外,异或满足交换律和结合律,具体实例见如下面试题。

面试题:有一个数列,其中的自然数的个数都是以偶数的形式出现,只有一个自然数出现的次数为奇数次,编写程序找出这个自然数。

算法1:遍历数组,找单数。这种方法是最容易考虑到的的方法,但是耗时间也耗空间。

算法2:针对异或满足交换律和结合律,用异或的方法,既省时间,又省空间。代码如下,宏 DIM(a) 用来计算数组长度,其中 sizeof(a) 表示 a数组占的字节数,sizeof(*a) 就是相当于a[0]占的字节数。

1 #include

2 #define DIM(a) (sizeof(a)/sizeof(*a))

3 intmain()4 {5 int str[] = {2,3,5,7,2,2,2,5,3,7,1,1,1};6 int find =0;7 int i=0;8 for(i=0;i

9、++    --

表达式 ++ 和 -- 的阅读技巧,贪心法:从左到右尽可能多的包含字符。因为编译器是从左向右的顺序一个一个的尽可能多的读入字符,一直到即将读入的字符不可能和已读入的字符组成合法符号为止。

1 #include

2 void test(void);3 void test2(void);4 void test3(void);5 void test4(void); //补充:逗号运算符

6 intmain()7 {8 test();9 return 0;10 }11

12 /************************************************************************13 C语言的灰色地带,由编译器决定,如果先算括号,那就是6+6+6=18;14 如果前面两次加之后,在+(++i),结果就是16--本编译器(Dev-C++)就是这样弄的15 ************************************************************************/

16 void test(void)17 {18 int i=3,j;19 j=(++i) + (++i) +(++i);20 printf("%d\n",j); //结果为16

21 }22

23 #if 0

24 //将test中的 j=(++i) + (++i) +(++i);括号去掉分析--报错

25 void test2(void)26 {27 int i=0,j;28 j = ++i+++i+++i;29 //分析--贪心法:从左到右尽可能多的包含字符: 前面一部分等价于:(++i)++ 相当于1++,一个数值++,就会报错 。30 //用 j=++i++;和1++;编译出错的结果是一样的,所以这样理解是对的。

31

32 printf("%d\n",j);33 }34 #endif

35

36 void test3(void)37 {38 int a=1;39 int b=1;40 intc;41 c=a+++b; //贪心法

42 printf("%d\n",a); //结果为2

43 printf("%d\n",c); //结果为2

44 }45

46 //逗号运算符规则,从左到右顺序求值,最后一个表达式的值就是逗号表达式的值。

47 void test4(void)48 {49 intx;50 int i=3;51 x=(++i,i++,i+10);52 printf("%d\n",x); //结果为15

53 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值