0
点赞
收藏
分享

微信扫一扫

C:03---运算符优先级

二话不说先看运算符的优先级表:

C:03---运算符优先级_#include

一、逗号运算符​

  • 格式:
  • 整个逗号表达式的值
  • 返回的结果是最后一个表达式的值
  • 使用起来,最好加上括号来返回最后一个表达式的值。否则逗号表达式的意义将失效(见下面演示案例)

(表达式1, 表达式2, 表达式3....);

#include <stdio.h>
int main() {
int i = 0;
i = 1, 2, 3, 4, 5;


return 0;
}

这段代码,你认为i的值应该是多少?0,1还是5?如果不明白,你往前面五行文字看。

二、%运算符的作用​

  • %运算符有一个作用,可以用来取一个范围内的数字,类似于随机数

原理:

  • 案例:0%3=0、1%3=1、2%3=2、3%3=0、4%3=1......
  • 由上可以得出:n%m。无论一个多大的数对m取余,得到的结果范围在[0---m-1]之间( n%m ==>范围[0---m-1]。)

C语言随机数函数

  • int a=rand()%10;  //产生0~9之间的随机数,就是上面的原理

三、*运算符的注意事项​

  • 在C语言中,要尽量少用*,特别是在硬件开发中
  • 因为对于*来说,CPU可能要运行多个周期,甚至还要利用软件的模拟方法来实现乘法。而+、-等运算符,CPU只需要一个周期 

四、++,-- 自增自减运算符

       这里区别于指针的++和--, --(++)变量  表示变量先-1(+1),再返回表达式的值。若运算符在变量后则表示先使用变量,然后变量-1(+1)。 


#include <stdio.h>
int main()
{
int a = 1;
int b = 1;


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


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


a = 0,b = 0;
printf(" %d %d %d \n",(b++)+a, a++);
printf("a:%d, b:%d\n", a,b);


return 0;
}

运行结果:

a++: 1
++a: 3
a--: 3
--a: 1
1 0 1
a:1, b:1

分析:第七行:先返回a的值,然后再进行a=a+1运算 因此输出1,a的值已经变成2了,

          第八行:先进行a=a+1赋值,所以得到a的值是3,此时将结果返回,所以打印输出3,

          那么第10,11行同理。

          第14行呢,我之前说过printf的顺序,从坐往右依次分别计算(b++)+a,  然后是a++,所以先看前面的表达式,b++在括号里运算符优先级较高,因此b++相当于是先返回b的结果0,然后再b=b+1,此时b已经变成1了, 那么(b++)+a之后就是1, 再看后边的表达式,a++,相当于返回a的值0再给a+1,此时a的值变成1了,所以15行打印的a和b的值都是1。


五、|| && 条件判断运算符

&&,表示两边的条件都成立才返回真,什么意思呢,比如有个A&&B,实际上程序是先走A,如果A成功了再执行B, 如果A返回假,那么B就不会再执行了。 


||,表示两边有一个条件成立就行, 比如 A||B   实际上程序是先走A,判断为真了,就不执行B了,如果A为假才会执行B。


!,表示相反,不解释了。

不要嫌弃高司机的话多,这里我给你一段代码,检查下自己是否已经掌握了:

#include <stdio.h>
int main()
{
int a = 1;
int b = 1;

if( a++ > 1|| ++b >= 1)
{
puts("test 1");
}
printf(" a:%d b:%d\n",a, b);

a = b = 1;
if( ++a > 1 && ++b > 1 )
{
puts("test 2");
}
printf(" a:%d b:%d\n",a, b);

a = b = 1;
if( ++a > 2 && ++b > 1 )
{
puts("test 3");
}
printf(" a:%d b:%d\n",a, b);


return 0;
}

运行结果:

test 1
a:2 b:2
test 2
a:2 b:2
a:2 b:1


六、sizeof 运算符

有人听到sizeof是运算符可能会大吃一惊,实际上在我开始学习C的时候,误认为sizeof是个函数。

那么sizeof怎么用,你可以 sizeof(变量名) ,sizeof(类型),sizeof 类型

#include <stdio.h>
int main()
{
int a = 12;
float b=12.0;
printf(" a:%d b:%d\n", sizeof a, sizeof b);
printf(" NULL:%d\n", sizeof NULL);
return 0;
}

你算下结果是不是和你想的一样,如果不一样,为什么呢,如果有不明白的可以在留言板或者聊天频道给我留言哈。高司机对粉丝是很有耐心的。


关于sizeof的更多用法,我将会在指针以及结构体部分渗入,你会感受到sizeof的无限乐趣。


七、位运算符​

按位与:&

  • 功能:对每一个比特位进行“与”运算
  • 演示案例:

#include <stdio.h>
int main()
{
int a = 8;
int b = 5;
printf("%d\n", a & b);
return 0;
}


  • 图示解析如下:


按位或:|

  • 功能:对每一个比特位进行“或”运算
  • 演示案例:


#include <stdio.h>
int main()
{
int a = 8;
int b = 5;
printf("%d\n", a | b);
return 0;
}


按位异或:^

  • 功能:对每一个比特位进行比较,相同为0,不同为1
  • 演示案例:

#include <stdio.h>


int main()
{
int a = 8;
int b = 5;
printf("%d\n", a ^ b);




return 0;
}

 

左移::<<

  • 功能:对一个数字进行左移,相当于对乘以“2的n次方”
  • 演示案例:

#include <stdio.h>


int main()
{
int a = 8;




// 相当于8*(2的2次方) = 8*4 =32
printf("%d\n", a << 2);




return 0;
}

       说到这里,如果你有一些复杂运算,是不断乘以或除以2,那么你其实可以考虑使用位运算更快捷。

右移::>>

  • 功能:对一个数字进行左移,相当于对除以“2的n次方”
  • 演示案例:

#include <stdio.h>
int main()
{
int a = 32;
// 相当于32/(2的2次方) = 32/4 =8
printf("%d\n", a >> 2);
return 0;
}





举报

相关推荐

0 条评论