c语言复习之运算符和表达式(四)

一步一个脚印,一路的风景才是最好的回馈!!!
c语言复习之运算符和表达式(四)_第1张图片

概述

  1. 表达式书写规则:
    • 运算符不能相邻
    • 乘号不能省略
    • 可用多层括号表示运算次序,但必须成对出现
  2. 运算符分类:
    • 按所需操作数:
      • 单目
      • 双目
      • 三目–条件表达式
    • 按作用

一、算术表达式

  1. 单目运算符不会改变操作数的值
  2. 整数相除会向下取整
  3. 求模运算只针对整数,且求模运算符号只与被模数有关
    • 运算技巧:
      • 7%2——7-(7/2)*2=1
      • 5%2——5-(5/2)*2=1

二、赋值运算符、关系运算符

c语言复习之运算符和表达式(四)_第2张图片


三、逻辑运算符

  1. &&,||,!
  2. &&和||存在短路现象,&&只要第一个条件为假,整个都为假,不用判断后一个条件;同理||,只要第一个为真,整个都为真,不用判断后一个
  3. printf是有返回值,返回的是输出的字节数
    • 例如:
printf(" ")&&printf("ABCD")输出0

四、特殊运算符

1.++ --对变量进行加1减1
2.只能对变量使用,不能用于常量和表达式
例如:

int a[10];
*(a++);//不合法

数组名代表首地址,是常量
3. 前置时先运算,再使用,后置相反
4. 一般不要嵌套使用

五、其它运算符

  1. 逗号运算符
    • 分隔
    • 求值,逗号表达式的值总是最后一个
  2. 条件表达式
    条件?成立:不成立;
  3. &取地址
  4. sizeof判断数据类型或者表达式长度(字节)的运算符
  5. 类型转换:(目标类型)数据;

六、位运算符

  1. 按位与 & 有0则0 如2&4得0
  2. 按位或 | 有1则1 如2 | 4得6
  3. 按位异或 ^ 相同为0,不同为1 如2^4得6
  4. 按位取反 ~ 单目运算符 0变1,1变0
  5. 右移:>> 右移操作就是整体往右移动n位,左边缺得补充符号位
    例如:2 >> 1 -> 0000 0010>>1 -> 0000 0001 -> 1
    10 > >2 -> 0000 1010 > >2 -> 0000 0010 -> 2
  6. 左移 << 2<<1 -> 0000 0010<<1 -> 0000 0100 -> 4

七、位运算得应用

  1. 判断一个数得最低位是0还是1
    思路;用0x1按位与判断 0000 0001
    如:printf(“%d",0&0x1)为0
  2. 判断一个数的最高位是0还是1
    思路;用0x80按位或判断 1000 0000
  3. 取出uint32_t color 每个字节中的数据
    uint32_t color=0x123456;
    uint8_t a=(uint8_t)color;
    uint8_t b=(uint8_t)(color>>8);
    其它同理
  4. 给定两个uint8_t类型的数,分别放入uint16_t的高字节和低字节
    uint8_t Hi=0x1A;
    uint8_t Lo=0x28;
    uint16_t ver;
    ver=((uint16_t)( Hi<<8 )) | Lo;
    解释:Hi<<8左移后,后八位都是0,而按位或运算又是有一则一
  5. 现在有如下几个状态
const int play=1<<0;       //1  播放状态
const int stop=1<<1;       //2  停止状态
const int pause=1<<2;      //4  暂停状态

如果一个变量保存有多种状态,并能反向识别出该变量有哪些状态,应如何处理?
注意状态的设置要保证无重复,有规律,最好是2n

int state=play | stop; //保存play,stop,3
//分别判断state里面是否有play,stop,pause,
//注意不要用if-else,状态会有多种

if(state &play) printf("play\n");  //state &play==1
if(state &stop) printf("stop\n");  //state &stop==2
if(state &pause) printf("pause\n");  //state &play==0,没找到

你可能感兴趣的:(C语言基础知识,c语言,开发语言)