C语言的运算符你了解吗

目录
  • 前言
  • 一、算数运算符(数学运算)
    • + -
    • * / %
  • 二、逻辑运算符(判断真假)
    • || &&
    • > >= < <=
    • !
    • ? : 三元运算符
  • 三、位运算符(重点)
    • << 左移
    • >> 右移
    • & | ^ ~ 与 或 异或 取反
  • 四、赋值运算符
  • 五、内存访问符号
    • () 限制符/函数访问符
    • [] 内存访问ID符
    • {} 函数体限制符
    • -> 地址访问符
    • .变量访问符
    • &取址符
    • *取值符
  • 总结

前言

自学笔记,没有历史知识铺垫(省略百度部分)C语言运算符的使用

一、算数运算符(数学运算)

+ -

左右数据同一数据类型

* / %

注意

乘/除法在很多CPU中无法实现,或者需要多个CPU周期去实现嵌入式开发中,乘/除法可能需要第三方乘法库才能实现乘/除法可能导致程序的移植性变差

%取模 场景:

获取范围数值时,如:int result=(x%100)+1; 则result值的范围为[1.100]得到m进制的个位数,如8进制个位数: int a=x%8;介于取模的特性,可以用在循环数组结构中获取下标,0,1,2,3,0,1,2,3,0,1,2…

二、逻辑运算符(判断真假)

|| &&

逻辑或 逻辑与

> >= < <=

大于 大于等于 小于 小于等于

!

? : 三元运算符

三元运算符

三、位运算符(重点)

<< 左移

运算场景:
左移1位,数据=数据2
m左移n位,m=m2ⁿ

>> 右移

运算场景:
右移1位,数据=数据/2
m右移n位,m=m/2ⁿ

注意:
signed和unsigned的右移动是不同的
signed修饰的变量的右移做while条件且变量为负数时,while会进入死循环(因为最高位=1,是符号位,永远无法右移为0)

& | ^ ~ 与 或 异或 取反

& 与
bit中任意一位与0相&,该位都为0
场景:

屏蔽清零器 a=a | (~(0x1<<n))

int a=0x1234;
//屏蔽低8位
a=a& 0xff00;
int a=0x1234;
//清零器,清除bit第五位的高电平,转为低电平,其他位不变
a=a & (~(0x1<<5));

| 或
bit中任意一位与1相|,该位都为1
场景:

保留/设置:设置高电平的方法,如设置指定位为高电平,其他位不变 a=a | (0x1<<n)

int a=3;
//使用左移可以更方便快速的让第五位bit处于高电平,而且不影响其他位(嵌入式中bit最右边通常读作第0位)
a= a| (0x1<<5)

^ 异或
相同为0,不同为1
1.通常用于数据加密算法,AES SHA1等
2.数据交换(排序中的一种方法)

a=a^b;

b=a^b;
a=a^b;

~ 取反
按位取反

四、赋值运算符

= += -= &= ...
赋值运算实际上是组合运算的缩写,非原子性操作,volatile内存可见特性会失效(实际上执行了两步,只靠volatile无法解决)

五、内存访问符号

() 限制符/函数访问符

1.限制符

(a+b)*c

1.函数访问符

void fun();

[] 内存访问ID符

内存访问ID符(C语言中并不局限于数组的访问,通过指针可以访问整个内存空间)

a[0]
a[1]

{} 函数体限制符

函数体限制符

-> 地址访问符

.变量访问符

&取址符

&a;

*取值符

*a;

总结

本章主要为C语言运算符的使用

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C语言位运算和sizeof运算符详解

    位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有6种:与(&),或(|),取反(~),异或(^),左移(<<),右移(>>). 1.位运算中的类型转换 位运算都必须进行Integer Promotion.在进行运算之前,都必须将char型.short型的数据转换为int或者unsigned int型再参与运算. 如下面这段程

  • C语言 运算符详细介绍及示例代码

    C 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本章将逐一介绍算术运算符.关系运算符.逻辑运算符.位运算符.赋值运算符和其他运算符. 算术运算符 下表显示了 C 语言支持的所有算术运算符.假设变量 A 的值为 10,变量 B 的值为 20,则: 运算符 描述 实例 + 把两个操作数相加 A + B 将得到 30 - 从第一个操作数中减去第二个操作数 A

  • C语言中左移和右移运算符详细介绍

    C语言中左移和右移运算符详细介绍 左移运算符(<<) 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出则舍弃该高位. 右移运算符(>>) 右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0. 对于有符号数,某些机器将对左边空出的部分用符号位填补(即"算术移位"),而另一些机器则对左边空出

  • c语言中的移位运算符

    移位运算符在程序设计中,是位操作运算符的一种.移位运算符可以在二进制的基础上对数字进行平移. c语言中提供了两种移位运算符: 左移运算符:<< 右移运算符:>> 左移运算符(<<) int main(void) { int a = 4; //把a的二进制位向左移动1位 int b = a << 1; printf("b = %d", b); return 0; } 在32位操作系统中,int类型占4个字节,1个字节有8bit,所以变量a在

  • C语言逻辑运算符知识整理

    在高中数学中,我们学过逻辑运算,例如p为真命题,q就假命题,那么"p且q"为假,"p或q"为真,"非q"为真. 在C语言中,也有类似的逻辑运算: 运算符 说明 结合性 举例 && 与运算,双目,对应数学中的"且" 左结合 1&&0.(9>3)&&(b>a) || 或运算,双目 左结合 1||0.(9>3)||(b>a) ! 非运算.单目 右结合 !a.!(

  • C语言位运算符的具体使用

    目录 布尔位运算符 移位运算符 对于更多紧凑的数据,C 程序可以用独立的位或多个组合在一起的位来存储信息.文件访问许可就是一个常见的应用案例.位运算符允许对一个字节或更大的数据单位中独立的位做处理:可以清除.设定,或者倒置任何位或多个位.也可以将一个整数的位模式(bit pattern)向右或向左移动. 整数类型的位模式由一队按位置从右到左编号的位组成,位置编号从 0 开始,这是最低有效位(least significant bit).例如,考虑字符值'*',它的 ASCII 编码为 42,相当

  • 手把手带你走进Go语言之运算符解析

    目录 概述 Go 运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符 概述 Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. Go 运算符 运算符 (operator) 可以帮助我们在程序中执行数学或逻辑运算. Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 算术运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 取余 ++ 自增 – 自减 例子: package main import "f

  • Go语言实现运算符重载的方法详解

    目录 前言 使用 实现 总结 前言 先带来日常的 GScript 更新:新增了可变参数的特性,语法如下: int add(string s, int ...num){ println(s); int sum = 0; for(int i=0;i<len(num);i++){ int v = num[i]; sum = sum+v; } return sum; } int x = add("abc", 1,2,3,4); println(x); assertEqual(x, 10)

  • 重学Go语言之运算符与控制结构详解

    目录 运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 指针运算符 运算符的优先级 控制结构 If For Switch 小结 运算符 运算符的作用是将操作数组合成表达式,比如下面的代码中,我们通过赋值和加号组成了两个表达式: var i,j = 1,2 n := i + j Go的运算符大体分为六种:算术运算符.关系运算符.逻辑运算符.位运算符.赋值运算符和指针运算符. 算术运算符 运算符 含义 + 加号,除了用于整数,浮点数,复数外,还可以用于字符串的拼接 - 减号 * 相乘

  • C语言关系运算符实例详解

    在程序中经常需要比较两个数据的大小,以决定程序下一步的工作.比如一个程序限制了只能成年人使用,儿童因为年龄不够,没有权限使用.这时候程序就需要获取用户输入的年龄并做出判断,如果超过18岁就正常运行,否则给出无权使用的提示. 比较两个数据大小的运算符称为关系运算符(Relational Operators). 在C语言中有以下关系运算符: 1) <(小于) 2) <=(小于或等于) 3) >(大于) 4) >=(大于或等于) 5) ==(等于) 6) !=(不等于) 关系运算符都是双

  • C语言位运算符:与、或、异或、取反、左移与右移详细介绍

    位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将

  • 详解易语言的运算符及表达式

    以下内容给大家分享了关于易语言运算符和易语言表达式相关的知识点内容,一起来学习下. 1.易语言运算符 易语言程序进行算术运算或关系比较操作时,需要使用运算符.易语言运算符如下: 程序中的运算符有其优先级别,在程序运行时按照符号的优先级别从高到低依次运算.易语言运算符优先级别如下: 易语言运算符优先级  2.易语言表达式 用运算符和括号将作为对象的各类数据连接起来,符合易语言语法规则的式子,称易语言表达式. 下面是一个表达式:变量1=((3×9-15÷3)-2)\8. 表达式中运算先后,是按照运算

  • C语言的运算符你了解吗

    目录 前言 一.算数运算符(数学运算) + - * / % 二.逻辑运算符(判断真假) || && > >= < <= ! ? : 三元运算符 三.位运算符(重点) << 左移 >> 右移 & | ^ ~ 与 或 异或 取反 四.赋值运算符 五.内存访问符号 () 限制符/函数访问符 [] 内存访问ID符 {} 函数体限制符 -> 地址访问符 .变量访问符 &取址符 *取值符 总结 前言 自学笔记,没有历史知识铺垫(省略

  • c语言算术运算符越界问题解决方案

    大量的安全漏洞是由于计算机算术运算的微妙细节引起的, 具体的C语言, 诸如符号数和无符号数之间转换, 算术运算的越界都会导致不可预知的错误和安全漏洞, 具体的案例数不胜数. 作为一个系统程序员, 有必要对这些细节有深入的了解. 本篇参考csapp, 主要介绍如何判断算术运算的越界问题. (虽然本篇的代码经过大量的测试, 但本人仍然无法保证代码的正确性, 希望大家纠错). 讲解的原则是"摆定理, 不证明, 写代码". 具体的证明过程在csapp中有详细的讲解, 也不是太难. 主要使用关键

随机推荐