C语言操作符详解

简介: C语言操作符详解

 今天主要给大家带来的是操作符详解,主要包括算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,逗号操作符。

1.算术操作符

算术操作符包括  +  -  /  *  %

我们写一个计算器代码来详细解释一下,代码如下:

#include<stdio.h>
int main()
{
  int a=10, b=3;
  int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0;
  num1 = a + b;
  num2 = a - b;
  num3 = a * b;
  num4 = a / b;
  num5 = a % b;
  return 0;
}

        在代码中我们可以清楚看到操作符的应用, 注意在% 操作符的两个操作数必须为整数。返回的是整除之后的余数,故被除数是浮点型的时候我们需要强制转换类型转换为整形。

2.移位操作符

移位操作符包括<<和>>

<<是左移,是将整形数据的补码向左移一位右边补0;

>>是右移,是将整形数据的补码向右移动一位,其中包括逻辑右移补0和算术右移补符号位。

代码如下:

#include<stdio.h>
int main()
{
  int num = 10;
  printf("%d\n",num << 1);
  printf("%d\n", num >> 1);
  return 0;
}

       对于num<<1,我们先写出num的二进制位00000000000000000000000000001010,正数原码补码反码相同,左移00000000000000000000000000010100,是正数原码补码反码相同为20.对于num>>,我们先写出num的二进制位00000000000000000000000000001010,正数原码补码反码相同,右移00000000000000000000000000000101(我们是按照算数右移来计算)正数原码补码反码相同,得到为5.注意移位时需要移动正整数位不能移动负数位,而且num必须为整数。

3.位操作符

&   按位与(补码全为1为1,否则为0)

|    按位或(补码有1为1,否则为0)

^   按位异或(相同为0,不同为1)

其中操作数必须为整数

        对于按位异或我们可以得到两个相同的数异或为0,一个数和0异或还是这个数,故我们可以得到不使用第三个变量来交换两个数,代码如下:

#include<stdio.h>
int main()
{
  int a = 2, b = 10;
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
  printf("a=%d,b=%d", a, b);
  return 0;
}

       能进行交换的原因是异或遵循交换律,再根据据 两个相同的数异或为0,一个数和0异或还是这个数,即可完成交换。

4.赋值操作符

赋值操作符也即是 = ,+= , -= , *= , /= , %=由于常用这些操作符这里不详细讲解。

5. 单目操作符

!
-
+
&
sizeof
~
--
++
逻辑反操作
负值
正值
取地址
操作数的类型长度(以字节为单位)
对一个数的二进制按位取反
前置、后置--
前置、后置++

*                              间接访问操作符(解引用操作符)

(类型)                      强制类型转换

对于!我们可以理解为非例如!0也就是非0,对于sizeof,代码如下

#include<stdio.h>
int main()
{
  int arr[5] = { 1,2,3,4,5 };
  printf("%d\n", sizeof(arr));
  printf("%d\n", sizeof(arr[0]));
  printf("%d\n", sizeof(arr)/sizeof(arr[0]));
  return 0;
}

运行后

由于sizeof单位是字节,我们也可以得到数组中有多少元素。

对于++和--,都分为前置和和后置,对于前置++a就是先让a加1再进行操作,后置a++就是先操作a再让a加1.对于前置和后置的结果都是让a加1.

6.关系操作符

>         大于

<         小于

==       等于

>=       大于等于

<=       小于等于

!=        不等于

7.逻辑操作符

&&     且

||        或

        例如我们想要表示0<=a<=2,需要用到&&,具体是a<=1&&a>=0.对于a<1且a>2,则需要用到||,具体为a<1||a>2.

8.条件操作符

表示为   exp1 ? exp2 : exp3

先判断exp1的真假,真则返回exp2的值,假返回exp3的值

例如代码

#include<stdio.h>
int main()
{
  int a = 0;
  a = 30 > 20 ? 1 : 2;
  printf("%d", a);
  return 0;
}

运行结果为

9.逗号操作符

表达式为        exp1, exp2, exp3, …expN

从第一个表达式开始到最后一个表达式,最后返回最后一个表达式的值,

代码如下;

#include<stdio.h>
int main()
{
  int a = 1;
  int b = 2;
  int c = (a > b, a = b + 10, a, b = a + 1);
  printf("%d\n", a);
  printf("%d\n", b);
  printf("%d\n", c);
  return 0;
}

运行结果如下

故我们可以得到在运算的过程中各个变量的值也会改变。 、

本次内容到此结束,希望大家可以一键三连。

目录
相关文章
|
2月前
|
存储 C语言 索引
【C语言篇】操作符详解(下篇)
如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算。
58 0
|
2月前
|
程序员 编译器 C语言
【C语言篇】操作符详解(上篇)
这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
124 0
|
2天前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
|
2月前
|
C语言
C语言操作符(补充+面试)
C语言操作符(补充+面试)
41 6
|
2月前
|
存储 编译器 C语言
十一:《初学C语言》— 操作符详解(上)
【8月更文挑战第12天】本篇文章讲解了二进制与非二进制的转换;原码反码和补码;移位操作符及位操作符,并附上多个教学代码及代码练习示例
51 0
十一:《初学C语言》—  操作符详解(上)
|
3月前
|
C语言
五:《初学C语言》— 操作符
本篇文章主要讲解了关系操作符和逻辑操作符并附上了多个代码示例
39 1
五:《初学C语言》—  操作符
|
4月前
|
C语言
C语言逻辑操作符的短路问题
C语言逻辑操作符的短路问题
|
4月前
|
编译器 C语言
【C语言】:中移位操作符,位操作符详运算规则详解
【C语言】:中移位操作符,位操作符详运算规则详解
33 1
|
4月前
|
存储 编译器 C语言
|
4月前
|
存储 C语言 索引
【C语言基础】:操作符详解(二)
【C语言基础】:操作符详解(二)