C语言入门篇(八)上

简介: C语言入门篇(八)

1. 操作符分类


算术操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

下标引用、函数调用和结构成员


2. 算术操作符


包括 + - * / %


例如:计算 3/2


#include<stdio.h>
int main()
{
  int a=3/2;
  printf("%d\n",a)
  return 0;
}

如果你觉得这样写,就大错特错了。


🍤 运行结果:

e770f9099de874f1917ffa5549c4f605_a8c44678027347a3bad62025adda934b.png


这是因为这里的 a 是整型的,计算出的结果就是整型,会自动舍去小数点后的数字。


更改 a 的类型为浮点数:


int main()
{
  double a = 3 / 2;
  printf("%lf\n", a);
  return 0;
}

其实,这样也是不对的。


🍤 运行结果:


5eb127ef1c6eeac8380ee132fa4ed0e1_0116bccce89c4c0aa438583752c327e2.png


仔细观察就会发现,这里的 a 虽然是 double 类型的,但 3 和 2 都是整形的, 3/2 计算后是 1,然后再将 1 装换成 double 型的赋给 a。


所以当计算的结果会出现浮点数时,除号的两端只要有一个小数就可以。


int main()
{
  //下面三种方式都可以计算出 1.5
  double a = 3.0 / 2.0;
  //double a = 3.0/2;
  //double a = 3 / 2.0;
  printf("%lf\n", a);
  return 0;
}

注:

🍥 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数


🍥 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法


🍥 除法中,除数不可以为 0


🍥 % 操作符的两个操作数必须为整数。返回的是整除之后的余数


3. 移位操作符


 << 左移操作符
 >> 右移操作符

移位操作符的操作数只能是整数。

移动的是二进制,因为能够处理的是二进制的信息


3.1 左移操作符

移位规则:左边抛弃、右边补0


例如:

#include<stdio.h>
int main()
{
  int a = 15;
  printf("%d\n",a<<1);//移动就是a中的2进制信息
  return 0;
}

🍤 图解:


a924b410e9dbba4b5096ea1b82a66410_54a27aa7c64d46408035eb2f255ee8a9.png


🍤 运行结果:


524a2e000539c5350755cbd40b870868_41c775529eaf4d07b3c294207b5cea21.png


3.2 右移操作符

移位规则:

首先右移运算分两种:


  • 逻辑移位

左边用0填充,右边丢弃

  • 算术移位

左边用原该值的符号位填充,右边丢弃

在C语言没有明确规定倒是算术右移还是逻辑右移,一般编译器上采用的是算术右移。


例如:


int a = -1; 

f55cbee5c02974c30044a01f66e27f54_7209ed574dfb44cb9ddd54d1e71b4c2c.png

对于移位运算符,不要移动负数位,这个是标准未定义的。


例如:


int a = 15;
a>>-1;//error

移位移动的是补码的二进制序列


//tip:
int a = 15;
  //00000000000000000000000000001111 - 原码
  //00000000000000000000000000001111 - 反码
  //00000000000000000000000000001111 - 补码
  int b = -15;
  //10000000000000000000000000001111 - 原码
  //11111111111111111111111111110000 - 反码(原码的符号位不变,其他位按位取反得到的就是反码)
  //11111111111111111111111111110001 - 补码(反码+1就是补码)
  //整数在内存中存储的是补码
  //计算的时候也是使用补码计算的

4. 位操作符


位操作符有:(也是操作二进制位)


& //按位与
| //按位或
^ //按位异或

🍩上述的操作数必须是整数。


例如:


// & 操作符
#include<stdio.h>
int main()
{
  int a = 3;
  //00000000000000000000000000000011 - 补码
  int b = -5;
  //10000000000000000000000000000101
  //11111111111111111111111111111010
  //11111111111111111111111111111011 - 补码
  int c = a & b;
  //& -- 对应二进制位有0则为0,两个同时为1,才是1
  //00000000000000000000000000000011
  //11111111111111111111111111111011
  //00000000000000000000000000000011 - 补码
  printf("%d\n", c);//3
  return 0;
}
// | 操作符
#include<stdio.h>
int main()
{
  int a = 3;
  //00000000000000000000000000000011 - 补码
  int b = -5;
  //10000000000000000000000000000101
  //11111111111111111111111111111010
  //11111111111111111111111111111011 - 补码
  int c = a | b;
  // | - 按(2进制)位或 - 对应的二进制位有1则为1,两个同时为0才是0
  //00000000000000000000000000000011
  //11111111111111111111111111111011
  //11111111111111111111111111111011 - 补码
  //11111111111111111111111111111010
  //10000000000000000000000000000101 - -5
  printf("%d\n", c);//-5
  return 0;
}
// ^ 操作符
#include<stdio.h>
int main()
{
  int a = 3;
  //00000000000000000000000000000011 - 补码
  int b = -5;
  //10000000000000000000000000000101
  //11111111111111111111111111111010
  //11111111111111111111111111111011 - 补码
  //
  int c = a ^ b;
  //^ - 按二进制位异或 -对应的二进制位相同为0,相异为1
  //00000000000000000000000000000011
  //11111111111111111111111111111011
  //11111111111111111111111111111000 - 补码
  //11111111111111111111111111110111
  //10000000000000000000000000001000 - -8
  printf("%d\n", c);//-8
  return 0;
}

实例1:交换2个整型变量


要想交换两个变量的值,最常见的方法是再创建一个变量,帮助我们实现:


#include<stdio.h>
int main()
{
  int a = 3;
  int b = 5;
  //交换
  int tmp = a;//临时变量 tmp
  a = b;
  b = tmp;
  printf("交换前:a=%d b=%d\n", a, b);
  printf("交换后:a=%d b=%d\n", a, b);
  return 0;
}

🍤 运行结果:

8d26975d3ef138685bc7d038a4df01db_d5e9f25ca8a34dd9b2423b6dc82c41c5.png


相关文章
|
1月前
|
C语言
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
1月前
|
NoSQL Java 编译器
C语言从入门到精通该怎样学?
持续学习与实践:编程是一门需要不断学习和实践的技能,要保持对新技术和新知识的敏感性,并持续进行编程实践。
34 1
|
2月前
|
存储 Java C语言
【C语言入门】初识C语言:掌握编程的基石
【C语言入门】初识C语言:掌握编程的基石
46 4
【C语言入门】初识C语言:掌握编程的基石
|
2月前
|
存储 Java 程序员
【C语言入门】C语言入门:探索编程世界的基础概念
【C语言入门】C语言入门:探索编程世界的基础概念
63 2
|
2月前
|
前端开发 C语言 C++
C语言入门02---环境搭建
C语言入门02---环境搭建
|
2月前
|
编译器 C语言 C++
C++从遗忘到入门问题之C++持从C语言的过渡问题如何解决
C++从遗忘到入门问题之C++持从C语言的过渡问题如何解决
|
3月前
|
存储 Web App开发 算法
c语言的简单入门
熟悉c语言(简单入门)
|
3月前
|
JavaScript C语言
|
3月前
|
存储 人工智能 Java
|
3月前
|
存储 程序员 Go