码迷,mamicode.com
首页 > 其他好文 > 详细

符号(位运算符,++,--,优先级和类型转换)

时间:2015-09-19 18:09:40      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

位运算符:&,|,^,<<,>>,~

都是基于二进制数的移动,其他进制都要转换成二进制进行

左移n位,相当于乘以2的n次方;右移n位,相当于除以2的n次方。

^:a^a=0,遵行交换律,结合律  a^b^a=a^a^b=b:如果a的个数为偶数,那么计算结果永远是b

++,--与逗号表达式的运算:

1 int x=3;
2 int y=(++x,x++,x+10);

逗号表达式的运算:从左到右,依次计算每个表达式的值,最后一个表达式的值就是逗号表达式的值

1 int i=3;
2 i+++i+++i++;

贪心法:
编译器处理的每一个字符应该尽可能多的包含字符,编译器从左到右的顺序一个一个尽可能多的读入字符,即当读入的字符不能和已经读入的字符组合合法为止。

所以上式的处理方式:(i++)+(i++)+(i++)

1 int i=1;
2 ++i+++i+++i++;

处理方式:(++i++)+(i++)+(i++)
++i++,++i=2,2++,是个错误的表达式,所以上式编译不能通过。

 

优先级+类型转换:

*p.f==>*(p.f)

int *ap[]==>int *(ap[])

int *fp()==> int *(fp())

==和!=优先级高于位操作符:val & mask !=0 -->val & (mask !=0)

==和!=优先级高于赋值运算符:val =getchar() !=EOF -->val = (getchar() !=EOF)

算术运算符高于位移运算符:msk<<4+sg-->msk<<(4+sg)

逗号运算优先级最低:a=1,2-->(a=1),2

c语言隐式类型转换:(先转换再执行相应的运算操作)

算术运算式中,低类型转换为高类型 (char,short-->int)

赋值表达式中,表达式的值转换为左边变量的类型

函数调用时,实参转换为形参类型

函数返回时,return表达式转换为返回值类型。

技术分享

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int i = -2;
 5     unsigned int j = 1; 
 6     if( (i + j) >= 0 ) //i先转换为unsigned int类型,注意负数的存储
 7     {
 8         printf("i+j>=0\n");   // i+j>=0 
 9     }
10     else
11     {
12         printf("i+j<0\n");
13     }
14     printf("i+j=%d\n", i + j);  // -1,%d表示有符合的整型
15     return 0;
16 }

 

符号(位运算符,++,--,优先级和类型转换)

标签:

原文地址:http://www.cnblogs.com/data1213/p/4821880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!