OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4473|回复: 1

C语言的基础知识----运算符。小百可看

[复制链接]

31

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2020-7-7
在线时间
8 小时
发表于 2020-8-11 17:31:55 | 显示全部楼层 |阅读模式
  运算符
  算术运算符
  运算符举例
  +加 a+b
  -减 a-b
  *乘 a*b
  /除 a/b
  %求余 a%b企鹅号1075083208
  加减和乘法运算符不必多说,我们来看看除法运算符和求余运算符
  除法运算符
  两个实数相除的结果为双精度实数,两个整数相除的结果为整数(一般向0取整)
  例如:5/3 运行结果为1,舍去了小数部分
  根据整数除法特性:四舍五入 设计方法
  四舍五入到个位
  #include
  int main()
  {
  float n = 1.525f; //float n = 1.425f;
  printf("%d", (int)(n * 10 + 5)/10); //四舍五入到个位 输出为 2
  return 0;
  }
  四舍五入到小数点后两位
  #include
  int main()
  {
  float n = 1.525f;
  printf("%f", (int)(n*100+0.5)/100.0); //四舍五入到小数点后两位
  return 0;
  }
  当然也有函数可以实现四舍五入
  里面有个 round() 函数 将浮点值舍入为最接近的整数。
  #include
  #include
  int main()
  {
  float n = 1.525f;
  printf("%f", round(n)); //输出为 2.000000
  return 0;
  }
  求余运算符
  求余只能两个整数求余
  利用求余得到整数的各个位数:水仙花数 算法
  #include
  int main()
  {
  int i,n,m,l;
  for(i=100;i<=999;i++)
  {
  n=i/100; //百位数
  m=i%100/10; //十位数
  l=i%10; //个位数
  if(i==n*n*n+m*m*m+l*l*l) //判断水仙花数
  {
  printf("%d\t",i);
  }
  }
  printf("\n");
  return 0;
  }
  关系运算符和逻辑运算符
  关系运算符
  关系运算符和逻辑运算符主要用在分支和循环里面作为条件判断真假
  比较的结果有两种状态 1 和 0 真(1)和假(0)
  关系运算符举例>小于 1>2 为假,结果为0<大于 1<2 为真,结果为2>=大于等于 1>=2 为假,结果为0<=小于等于 1<=2 为真,结果为1==等于 1==2 为假,结果为0!=不等于 1!=2 为真,结果为1
  对于小数 浮点型数据不够精确 一般不用==
  0.009
  逻辑运算符
  && 逻辑与
  左右两个条件都为真 最后的结果为真 否则(只要有一个为假) 结果为假
  if(0.009
  || 逻辑或
  左右两边的条件只要有一个为真 结果为真 两边都为假 结果为假
  if(x<0.009||x>0.011){}
  !逻辑非
  一般放在一个条件前面 真变假 假变真
  关于用数字作为条件 0为假 非0为真
  逻辑运算符的截断
  逻辑与 两边都为真 结果为真
  左边为假 直接得到整个式子的结果为假(右边可以不用算)
  #include
  int main()
  {
  int x=1;
  if(0&&(++x)){}
  printf("%d",x); //结果为1 即++x这个代码未执行
  return 0;
  }
  逻辑或 左边为真 右边可以不用算(截断)
  位运算符(二进制运算符)
  学C语言很少用到二进制,但是,我们需要了解他
  按位与 &
  对一个二进制数字操作:有0则0
  14&89 14二进制:1110 89二进制:0101 1001
  0000 1110
  0101 1001
  按位与 0000 1000
  结果为:0000 1000(二进制),10(十进制)
  按位或 |
  对一个二进制数字操作:有1则1
  按位异或 ^
  对一个二进制数字操作:相同为0不同为1
  按位取反~
  对一个二进制数字操作:1变0 0变1
  ~14 14二进制:0000 1110
  0000 1110
  按位取反 1111 0001
  左移 <<
  x<
  14<<2 14二进制:0000 1110
  0000 1110
  0011 1000
  左移补0 结果为0011 1000
  右移 >>
  x>>n 去掉后面的n位 前面补上n个符号位(正数前面补0 负数前面补1)
  对于一个正整数 右移一位相当于除以2
  异或 ^
  特点:对于同一个数字异或两次会得到它本身
  14^87^87==14
  异或的用法
  简单的加密
  z=x^y 对x进行加密
  a=z^y 对z进行解密
  交换两个变量的值
  //利用临时变量交换
  int temp;
  temp=x;
  x=y;
  y=temp;
  //利用异或
  x=x^y;
  y=x^y;
  x=x^y;
  //用加减法
  x=x+y; //对于x和y比较大的时候 x+y可能超过int范围
  y=x-y;
  x=x-y;
  赋值运算符
  把一个值赋值给一个变量: 左值 = 右值 把右值赋值给左值
  x=4; //4这个值赋值给x这个变量
  左值 只能是变量
  右值 可以是数字 表达式(1+2)
  条件运算符(三目运算符)
  条件 ? 表达式1 : 表达式2
  //求两个数的最大值
  max=a>b?a:b;
  其他运算符
  () 括号运算符
  改变计算顺序(优先级)
  类型转换
  (float)3/4:
  类型转换存在的问题:精度高的数据 转换成精度低的数据 可能会丢失数据
  类型 char int float double 精度由低到高
  (int)(3.14+0.5) 小数强转整数 小数部分全部丢掉
  ++ --自增和自减
  前++
  先运算,再自增
  int x,y;
  x=0;
  y=x++; //先用x之前的值进行计算 然后 再给x变量加1
  //结果y=0,x=1
  后++
  先自增,再运算
  int x,y;
  x=0;
  y=++x; //先给x变量加1,再进行计算
  //结果y=1,x=1
  前加加,后加加探讨(小白勿看)
  #include
  int main()
  {
  int i = 5, j = 5, p, q;
  p = (i++) + (i++) + (i++);
  q = (++j) + (++j) + (++j);
  printf("%d,%d,%d,%d", p, q, i, j);
  return 0;
  }
  输出结果:15,22,8,8
  这个涉及到 前加加先运算,再自增;后加加先自增,再运算 这一特性
  #include
  int main()
  {
  int i = 8;
  //输出 i
  printf("%d\t", ++i); //i先加一在输出 9 9
  &#8203;
  printf("%d\t", --i); //i先减一再输出 8 8
  &#8203;
  printf("%d\t", i++); //i输出再加一 8 9
  &#8203;
  printf("%d\t", i--); //i输出再减一 9 8
  &#8203;
  printf("%d\t", -i++); //i输出再加一 -8 9
  &#8203;
  printf("%d\t", -i--); //i输出再减一 -9 8
  &#8203;
  printf("\n-----------------\n");
  &#8203;
  i = 8;
  printf("%d\t%d\t%d\t%d\t%d\t%d\n", ++i, --i, i++, i--, -i++, -i--);//前加加完成后再后加加
  return 0;
  }
  //运行结果
  9 8 8 9 -8 -9
  -----------------
  8 7 8 8 -8 -8
  这又涉及到C的特性:语句编译时从右往左
  & 取变量地址
  scanf("%d",&a);
  sizeof 计算变量/类型的大小
  sizeof(int)
  逗号运算符 隔开几个表达式
  int x;
  x=1,2,3+4,5,7; x最后的值是1
  其他
  [] 下标运算符
  . 点运算
  -> 箭头运算符
  *指针运算符
  () 函数
  {}语句
  其他后面介绍
  优先级
  这个不需要记,需要用的时候查表就可以
  从上到下优先级降低
  不清楚优先级顺序加()


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2020-12-4
在线时间
2 小时
发表于 2020-12-7 12:21:04 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 09:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表