嵌入式初学-C语言-四

运算符

位运算符

说明:按位(bit)来进行运算操作的运算符

语法: ~(按位取反) &(按位与) |(按位或)  ^(按位异或)  <<(左移)  >>(右移)

~:按位取反

说明:单目运算符,数据的每一个bit位取反,也就是二进制数位上的1变0,0变1

举例:

unsigned char ret = ~0x05;// 0000 0101 --> 1111 1010
printf("%d\n",~5); // -

&:按位与

语法: a & b

说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐,处理结果如下:

1&1:1    110 &100:100

总结:如果我们前后两个操作数对其位置上的二进制数字都是1,其结果是1,否则结果都是0

|:按位或

语法: a | b

说明:首先将参与计算的操作数转换为二进制,然后按照每一位进行对齐,处理结果如下:

1|1:1    110 |100:110

总结:如果我们前后两个操作数对其位置上的二进制数字只要有1,其结果是1,否则结果都是0

^:按位异或

语法:a ^ b

说明:首先将参与计算的操作数转换为二进制,然后按照每一位进行对齐,处理结果如下:

1^1:0

1^0:1

0^0:0

0^1:1

总结:不同为真,相同为假

<<:左移,按bit位往左偏移

1.无符号移动:(数据变大)

语法:操作数 << 移动位数(bit位)

unsigned int a = 3 << 3

printf(”%d\n”,a);  //24

2.有符号的左移:(数据变小)

语法:操作数 << 移动位数(bit位)

int a = -3 << 3

printf(”%d\n”,a);  //-24

>>:右移,按bit位往右偏移

1.无符号移动:(数据变小)

语法:操作数 >> 移动位数(bit位)

unsigned int a = 3 << 3

printf(”%d\n”,a);  //0

2.有符号的右移:(数据变大)

语法:操作数 >> 移动位数(bit位)

int a = -3 >> 3

printf(”%d\n”,a);  //-1

注意:

1.再进行移位运算的时候,凡是被移出去的位统统丢弃,凡是空出来的统统补0,移位运算针对的是无符号整数。

2.如果非要进行有符号的运算,那么左移的时候,空出来的补0,右移的时候,空出来的补符号位(原码阶段)。

其他运算符

赋值运算符:

=  :由右向左,优先级排倒数第二

 int a = 4;

 int num = 5 + 6;

注意:赋值运算符的左边(左操作数)必须是可写的地址

复合赋值运算符

+=  -=  *=  /=  %= ,由右向左,优先级倒数第二

 int i = 1;

 i+=1  //等价于i=1+1

 i*=5  //等价于i=1*5

三目运算符

语法: 表达式1?表达式2:表达式3

求值顺序:

如果表达式1的值为1,则整个条件运算表达式的值为表达式2的值

如果表达式1的值为0,则整个条件运算表达式的值为表达式3的值

例一:

//需求:根据考试成绩进行奖励惩罚

//    score >= 90 奖励电脑一台

//  score < 90  奖励刷锅1个月

 int score = 89;

 printf(”%s\n”, score >= 90 ? “奖励电脑一台”:“奖励刷锅1个月”);

例二:

 int a = 10,b = 20;

 int ret = a>b?++a:++b;

 printf(“ret:%d a:%d b:%d\n”,ret,a,b);  // ret=21,a=10,b=21

逗号运算符:

说明:优先级最低,左到右,由多个运算符将多个式子两届起来的表达式称为都好表达式

语法:

  (表达式1,表达式2…表达式n)

求值顺序:先求表达式1,再求表达式2,以此类推,整个逗号表达式的值为表达式n的值

注意:

1.逗号表达式的优先级最低

2.运算顺序从左往右

3.整个逗号表达式的值取决于最右边表达式的值

举例:

 int a = 5, b = 3;

 int ret = (a>b,a++,b++,a);  //这种写法是为了减少代码量

 printf(“ret:%d\n”,ret);

优先级的顺序:

补充:6818开发板:

需求:将一张BMP图片显示到开发板的LCD屏幕上

说明:

屏幕显示:BGR

图片显示:RGB

实现:RGB --> BGR

B:右移0个字节,也就是移动0位 B >> 0

R:右移2个字节,也就是移动16位 R >> 16

G:右移1个字节,也就是移动8位 G >> 8

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值