您的位置:首页 > 编程语言 > C语言/C++

c语言深度剖析之学习笔记(二)------------符号

2014-05-06 23:32 495 查看
2.1   注释符号

2.1.1

(1)int/*....*/i;

(2)char *s ="abcdefg //hijklmn";

(3)//IS if a\

 valid comment?

 

 

(4)int/*..*/t i; //不对

说明:不是简单的剔除,而是用空格代替原来的注释

2.1.2  y=x/*p--------------错误

可以修改为:

    y=x/ *p

y=x/(*p)

2.2  接续符  和  转义符

2.3  单引号  和双引号

2.4  逻辑运算符----------注意短路规则

    int i=0;

    int j=0;

 

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

       {

       printf("%d\n",i);

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

       }

输出:

i=1, j =0;

2.5  位运算符

&    按位与

|     按位或

^     按位异或

~  取反

<<    左移

>>   右移

说明:按位异或可以实现不用第三个变量是实现交换两个变量的值: (面试题一般会出这种变态的问题)

int a=3;

    int b=6; 

    a ^=b;

    b ^=a;

    a ^=b;

    printf("%d\n",a);

printf("%d\n",b);

2.5.1 位运算符不能用于基本类型是:有符号的操作数上。

2.5.2  “+”优先级比“<<”优先级高

       inta =0x01 <<2+3;

    printf("%d\n",a);

左移或者右移的位数<=数据的长度;

如:   0x01 << 2+30;

        0x01<< 2-3;

2.6 花括号

2.7 ++,--操作符

(1)

       int i = 3;

       (++i) + (++i) + (++i);

       printf("%d\n",i);  //测试结果为:6

(2)

int i = 3;

       printf("%d\n",(++i) + (++i) +(++i));  //测试为:16

(3)

   
int i =0;

       printf("%d\n",(i++,i++,i++));  //测试结果为:2

(4)

    int i =0;

    int k = (i++) + (i++) + (i++);

       printf("%d\n",k);  //k  =3

问题:

    int i =0;

       for( i =0 ,printf("First =%d\n",i);

       printf("Second =%d\n",i),i<3;

       i++,printf("Third = %d\n",i))

      

       {

              printf("Fourth = %d",i);

       }

打印:

First = 0

Second = 0

Fourth = 0Third =1

Second = 1

Fourth = 1Third =2

Second = 2

Fourth = 2Third =3

Second = 3

 

2.7.1   ++i+++i+++I 似乎这是有错误的

    int a = 3;

    int b = 2;

int k = a+++b;

2.8   2/(-2)的问题

       printf("%d\n",(-2)/2);    //-1

       printf("%d\n",(-2)%2);   //0

       printf("%d\n",2/(-2));      // -1

       printf("%d\n",2%(-2));    //0

 

大多数编译器满足:

假设: a / b= q……r

(1)b*q +r == a

(2)如果改变a的正负号,希望q的符号也随之改变,但是q的绝对值不会改变。

 

2.9 符号的优先级

容易出错的优先级问题:(5颗星)

(1).的优先级高于*   
*p.f  //对p去偏移,作为指针,解引用误认为:(*p).f       

(2)[]的优先级高于*  
int *p[] //指向int数组的指针  
误认为:int   (*p)[]

(3)()高于*  int *fun()

(4)=
和!=
高于位操作(val & mask
!=0) 
实际:val&
(mask
!=0)

误操作  
(val& mask
)!=0

(5)算术运算符高于移位运算符  msb<<4+lat;

(6)逗号运算符优先级最低
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: