C语言 操作符分类解析与使用

目录
  • 操作符的分类
    • 算术操作符
    • 移位操作符
    • 位操作符
    • 逻辑操作符
    • 逗号表达式
  • 表达式求值
    • 隐式类型转换
    • 算术转换
    • 操作符的属性

xwg今天就带各位大佬来了解一波C语言的操作符。

操作符的分类

常见的操作符分别如下:

  • 算术操作符
  • 移位操作符
  • 位操作符
  • 逻辑操作符
  • 逗号表达式

算术操作符

算术操作符是我们最常用的操作符:+ - * / %
注:

  • 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
  • 对于 / 操作符如果两个操作数都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法。
  • % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

移位操作符

移位操作符分为左移操作符和右移操作符,移位操作符的操作对象只能是整数,且所谓的移位是对于整数的二进制位进行移位:
左移操作符:<<
右移操作符:>>

左移操作符:
移位规则:左边抛弃,右边补0右移操作符:
移位规则:
2.1 逻辑移位
左边用0填充,右边丢弃
2.2算术移位
左边用原该值的符号位填充,右边丢弃
注:大部分编译器右移都是执行算术右移。

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

位操作符

位操作符有:

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

位操作符的操作数必须是整数,且是对其二进制的补码进行操作。
异或的基本性质:

  • 0异或上任何数为其本身:0^2=2
  • 任何数异或上其本身等于0:2^2=0

例:不创建临时变量使两个数进行交换

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

逻辑操作符

逻辑操作符分为:

&& —— 逻辑与
|| —— 逻辑或

逻辑与:
必须使 && 左右两个表达式都为真

逻辑或:
|| 两边有一个式子为真即为真

逗号表达式

逗号表达式是用逗号隔开的多个表达式:
exp1, exp2, exp3, …expN
逗号表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果。

表达式求值

表达式求值的顺序一部分是由操作符的优先级和结合性决定,但是,有些表达式的操作数在求值的过程中可能需要转换为其他类型。

隐式类型转换

C语言的整型算术运算总是至少以缺省整型类型的精度来进行的,为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。

实例:

char a,b,c;
...
a = b + c;

b和c的值被提升为普通整型,然后再执行加法运算,加法运算完成之后,结果将被截断,然后再存储于a中。

整形提升是按照变量的数据类型的符号位来提升的,若操作对象为正数则补0,操作对象为负数则补1。

负数的整形提升
char c1 = -1;
变量c1的二进制位(补码)中只有8个比特位:
1111111
因为 char 为有符号的 char
所以整形提升的时候,高位补充符号位,即为1
提升之后的结果是:
11111111111111111111111111111111

正数的整形提升
char c2 = 1;
变量c2的二进制位(补码)中只有8个比特位:
00000001
因为 char 为有符号的 char
所以整形提升的时候,高位补充符号位,即为0
提升之后的结果是:
00000000000000000000000000000001

无符号整形提升,高位补0

int main()
{
	char a = 5;
  //存在char、short计算时发生整形提升
	//00000000000000000000000000000101
	//截断后
	//00000101 - a
	//整型提升后(整形提升是按照变量的数据类型的符号位来提升的)
	//00000000000000000000000000000101
	char b = 126;
	//00000000000000000000000001111110
	//01111110 - b
	//整型提升后
	//00000000000000000000000001111110
	char c = a + b;
	//00000000000000000000000000000101
	//00000000000000000000000001111110
	//00000000000000000000000010000011
	//11111011 - c
	//整形提升后
	//11111111111111111111111110000011 - 补码
	//11111111111111111111111110000010 - 反码
	//10000000000000000000000001111101 - 原码
	printf("%d\n", a + b);
}

算术转换

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。

下面的层次体系称为寻常算术转换:

long double
double
float
unsigned long int
long int
unsigned int
int

如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。

操作符的属性

复杂表达式的求值有三个影响的因素。

  • 操作符的优先级
  • 操作符的结合性
  • 是否控制求值顺序。

两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。

到此这篇关于C语言 操作符分类解析与使用的文章就介绍到这了,更多相关C语言 操作符内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言入门篇--充分理解操作符

    目录 1.算术操作符 1.1除法运算 1.2取模运算 2.移位操作符 相关知识 1.移位运算是站在二进制角度移位的 2.左移右移,原始变量值不发生变化除非给原始变量赋值 3.整数移位运算不能整除时,只保留整数部分 4.C语言中的移位运算符 5.移位分为算术移左移.算术移右移和逻辑左移.逻辑右移 3.位操作符 3.1按位与& 3.2按位或 | 3.3异或 ^ 4.赋值操作符 5.单目操作符 5.1 逻辑反操作 ! 5.2 负值 - 正值 + 5.3 取地址 & 5.4 取反 ~ 5.5 前置

  • C语言操作符基础知识详解

    目录 一.单目操作符: 二.关系操作符 三.条件操作符 四.逗号表达式 五.逻辑操作符 总结 一.单目操作符: !:逻辑反操作符: -:负数操作符: +:整数操作符: &:取地址操作符: sizeof:操作数的类型长度操作符: sizeof(数组名)--数组名表示整个数组,sizeof(数组名)求的是整个数组的大小,单位是字节 例如: int a[10] = { 0 }; printf("%d\n",sizeof(a)); suzeof(a[0]);-->(4) 不同的表

  • 详解C语言之操作符

    目录 1.加减乘 2.除(/) 注意: 3.取余(%) 注意: 4.移位操作符(>> <<) 注意 5.位操作符(| ,& ,^) 6.逻辑操作符(&& , ||) 7.单目操作符 7.1正负号(+ -) 7.2sizeof() 7.3按位取反(~) 7.4逻辑反操作(!) 8.赋值操作符 9.复合操作符.等式左边不是常量 补充: 总结 1.加减乘 c里的加减乘同我们实际生活功能相同,我们不做探究,看例子即可 2.除(/) c语言里的除法实质上是求商操作(零

  • 一篇文章带你了解C语言操作符

    目录 一.操作符分类 二.算术操作符 三.移位操作符 1.左移操作符 2.右移操作符 2.1算术移位 2.2逻辑移位 四.位操作符 1.按位与 2.按位或 3.按位异或 4.一道练习题 五.赋值操作符 1.赋值操作符(=)是一个很棒的操作符,他可以让你得到一个你之前不满意的值.也就是你可以对其重新赋值. 2.赋值操作符可以连续使用 3.复合赋值符 六.单目操作符 1.逻辑反操作 2.取地址 3.sizeof 4.++和--运算符 4.1前置++和-- 4.2后置++和-- 七.关系操作符 八.逻

  • 关于C语言操作符的那些事(超级全)

    目录 前言 操作符的分类 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用符 函数调用符 结构体调用操作符 总结 前言 C语言中操作符不多,但是有些相同的操作符都是在不同的表达式中,有不同的解释意思,比如 * 号,在表达式中5*5表示乘号,在int *p表示指针,在 *p = 10中,又表示解引用,所以今天就来详细的整理一下C语言中的操作符,做到心中有数,可以一眼识破,用途有哪些.重点不是记忆:是理解,兄弟们,要动本质. 操作符的分类 注意:

  • 一篇文章带你入门C语言:操作符

    目录 操作符 分类 算术操作符 移位操作符 整数存储规则 左右移位规则 赋值操作符 单目操作符 取地址操作符& 解引用操作符* 类型长度操作符sizeof 按位取反操作符~ ++ -- 操作符 强制类型转换操作符(type) 关系操作符= 逻辑操作符 短路运算 条件操作符 逗号表达式 下标引用.函数调用和结构成员 下标引用操作符[] 函数调用操作符() 结构成员操作符. -> 结构体定义 结构体使用 结构体地址 表达式求值 隐式类型转换 整型提升 如何整型提升 有符号数 无符号数 算术转换

  • C语言操作符基础知识图文详解

    目录 1.算术操作符 + - * / % 2.移位操作符 >> (右移操作符) <<(左移操作符) 左移操作符:<< 右移操作符:>> 3.位操作符 3.1 & 按位与 3.2 | 按位或 3.3 ^ 按位异或 3.4 ~ 按位取反 4.赋值操作符 = 5.逻辑操作符 5.1 ! 非 5.2 && 与 5.3 || 或 6.条件运算符 ? 7.单目操作符 7.1 ! 7.2 + 正值 7.3 - 负值 7.4 & 取地址 7.

  • C语言 操作符分类解析与使用

    目录 操作符的分类 算术操作符 移位操作符 位操作符 逻辑操作符 逗号表达式 表达式求值 隐式类型转换 算术转换 操作符的属性 xwg今天就带各位大佬来了解一波C语言的操作符. 操作符的分类 常见的操作符分别如下: 算术操作符 移位操作符 位操作符 逻辑操作符 逗号表达式 算术操作符 算术操作符是我们最常用的操作符:+ - * / % 注: 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数. 对于 / 操作符如果两个操作数都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法.

  • C语言 指针综合解析

    目录 指针总结 1.指针的本质 1.1 指针的定义 1.2 取地址操作符与取值操作符 2.指针的使用场景 2.1 指针的传递 2.2 指针的偏移(指针的加减) 2.3 指针与自增.自减运算符 2.4 指针与一维数组 2.5 指针与动态内存申请(malloc) 2.6 字符指针与字符数组的初始化 3.二级指针 3.1 二级指针的传递 指针总结 部分笔记来源于王道C语言训练营 指针:变量的地址 指针变量:一个变量专门用来存放另一变量的地址 1.指针的本质 1.1 指针的定义 通过取地址(指针)直接访

  • C语言操作符超详细讲解上篇

    目录 前言 1.操作符的分类 2.算术操作符 3.移位操作符 3.1 左移操作符 3.1.1 正数左移1位 3.1.2 负数左移1位 3.2 右移操作符 3.2.1 正数右移1位 3.2.2 负数右移1位 3.3 移位操作符说明 4.位操作符 4.1 练习 1 4.2 练习 2 总结 前言 操作符主要内容包括:各种操作符的介绍,用表达式求值. 1.操作符的分类 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用.函数调用和结构成员

  • C语言数据结构详细解析二叉树的操作

    目录 二叉树分类 二叉树性质 性质的使用 二叉树的遍历 前序遍历 中序遍历 后序遍历 层序遍历 求二叉树的节点数 求二叉树叶子结点个数 求二叉树的最大深度 二叉树的销毁 二叉树分类 满二叉树 除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树.也可以理解为每一层的结点数都达到最大值的二叉树. 完全二叉树 一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下.从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为

  • C语言 文件操作解析详解及实例代码

    C语言文件操作解析 在文件操作中除了打开操作以及读写操作,还有几种比较常见的操作.下面介绍一下这些操作中涉及到的函数. 一.移动位置指针的函数 rewind函数和fseek函数,这两个函数的原型是: void rewind(FILE *fp);     将位置指针移动到文件首 int fseek(FILE *fp,long int offset,int origin);   将位置指针移动到距离origin的offset字节数的位置 其中对于fseek函数中的参数,origin为起始点,offs

  • c语言实现基数排序解析及代码示例

    1. 基数排序(radixsort)属于"分配式排序"(distributionsort),又称"桶子法"(bucketsort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些"桶"中,藉以达到排序的作用. 2.基数排序的实现方法分为两种: 最高位优先(MostSignificantDigitfirst)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码

  • Python语言异常处理测试过程解析

    这篇文章主要介绍了Python语言异常处理测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 (一)异常处理 1.捕获所有异常 try: x = 5 / 0 except: print('程序有错误') 2.捕获特定异常 try: x = 5 / 0 except ZeroDivisionError as e: print('不能为0',e) except: print('其他错误') else: print('没有错误') final

随机推荐