iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中各种运算类型全面总结
  • 919
分享到

C语言中各种运算类型全面总结

2024-04-02 19:04:59 919人浏览 安东尼
摘要

目录一、概述二、四则运算三、关系运算四、逻辑运算与位运算五、深度剖析位运算一、概述 C语言中支持下面4种类型的运算 运算类型运算符四则运算+,-,*,/,%关系运算<,>

一、概述

C语言中支持下面4种类型的运算

运算类型运算符
四则运算+,-,*,/,%
关系运算<,>,<=,>=,==,!=
逻辑运算&&,||,!
位运算&,|,^,>>,<<,~

二、四则运算

(+,-,*,/,%)

  • 就是数学中的加,减,乘,除等运算
  • 遵循先乘除后加减的运算优先级
  • 可以使用括号改变运算顺序

注意:

C语言中的除法运算,其除数不能为0

下面通过一段程序感受一下:

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

下面为输出结果:

通过上面的代码,可以得到一些小结论:

  • 整型数的除法运算结果会舍弃小数部分
  • 取余(%)运算也是一种除法运算,结果为余数
  • 浮点数不能进行取余运算

三、关系运算

(<,>,<=,>=,==,!=)

  • 比较两个值大小关系或相等关系的运算
  • 比较的结果为逻辑值: 真(1),假(0)
  • 可以使用括号()改变关系运算的顺序

如上面的图片所示,c 的值就为0

下面通过一段代码,感受一下:

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

下面为输出结果:

小技巧:如果不同类型的运算同时出现在一个表达式中,那么尽量使用括号()指明运算顺序。

运算优先级(优先级:四则运算 > 关系运算 > 赋值操作)

四则运算

  • 正负号 > 乘除运算 > 加减运算

关系运算

  • 大小比较运算 > 相等比较运算

赋值操作

下面看一段代码,深入感受一下运算优先级:

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

下面为输出结果,可以看出,c 的输出结果为1,为什么为1呢?这是由于乘法优先级大于加法优先级大于关系运算优先级,所以程序执行过程是这样,先计算 a * b,然后将 a * b 的结果 2 加上 b,得到4,最后再比较 a != 4,得到的结果当然为1啦,我们还可以通过反汇编来观察代码的执行过程。

c = a != b + a * b的汇编代码

所以如果想得到a != b 再加上a * b的结果,一定要记得加括号,如下:

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

这样才能得到正确结果,如下所示:

小结:

  • 整型数除法有两种:取商(/),取余(%)
  • 浮点数除法与数学中除法运算相同,结果为浮点数
  • 不同运算的优先级不同,可使用括号改变运算优先级
  • 同一个表达式中应避免不同的运算类型(四则运算,关系运算)

四、逻辑运算与位运算

逻辑运算(&&,ll,!)

  • 逻辑运算的参与者为逻辑值(真或假)
  • 任何非零值在逻辑运算中都为真
  • 任何零值在逻辑运算中都为假
&&运算
左操作数右操作数结果
000
010
100
111
||运算
左操作数右操作数结果
000
011
101
111

逻辑运算中的短路法则

对于&&运算

  • 从左向右进行,如果有一个操作数为假,则整个表达式为假
  • 第一个为假的操作数之后的其它操作数不再计算

对于||运算

  • 从左向右进行,如果有一个操作数为真,则整个表达式为真
  • 第一个为真的操作数之后的其它操作数不再计算

取非运算(!)

单目运算(只需要一个操作数),运算结果为逻辑值

  • 对真值取非的结果为假
  • 对假值取非得结果为真

话不多说,上代码:

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

下面为运行结果:

位运算(&,|,~,^,<<,>>)

  • 直接对数据的二进制位进行操作
  • 位运算的基本单位是二进制位,所以也是一种0和1的操作
  • 可以使用括号()改变位运算的运算顺序
  • 位运算的操作数只能是整型数(浮点数不能直接进行位运算)
运算符含义示例优先级
~按位求反~0101 -> 10101(高)
<<左移:高位移出,低位补00011 << 1 -> 0110 2
>>右移:低位移出,高位补符号位0101 >> 2 -> 00012
&按位与0111 & 1100 -> 01003
^按位异或:相同为0,不同为10111 ^ 1100 -> 10114
|按位或0111 | 1100 -> 11115(低)

注:

1.按位与和逻辑与的计算法相同:两者为1,结果为1,否则为0

2.按位或和逻辑或的计算法相同:两者为0,结果为0,否则为1

位运算实例

  • 将整数5的第2个二进制位置1
  • 将整数7的第4个二进制位取反
  • 将整数2的最后两位取反
  • 将整数15右移2位,再将第2个二进制位置0
  • 设变量a的二进制数是10101101,若想通过运算a ^ b使得a的中间4位取反,其余位不变,则b的值是多少?

代码如下:

#include <stdio.h>
int main()
{
    printf("c = %d\n", 5 | 2);
    printf("c = %d\n", 7 ^ 8);
    printf("c = %d\n", 2 ^ 3);
    printf("c = %d\n", (15 >> 2) & 13);
    printf("c = %d\n", 173 ^ 60);
    return 0;
}

运行结果如下:

这里需要特别注意:对某一位或者某几位取反可以用异或(^)运算,这在工程里常用!!!

运算优先级(优先级从上到下为由高到低)

  • 正负号>逻辑非>按位取反
  • 乘除>加减>按位左右移
  • 大小比较运算>相等比较运算
  • 按位与>按位异或>按位或
  • 逻辑与>逻辑或
  • 赋值操作

小结

  • 逻辑运算中有特殊的短路法则,结果确定后不再向下计算
  • C语言中的真值对应非零值,假值对应零值
  • 位运算直接对数据的二进制位进行操作
  • 位运算的操作数只能是整型数(浮点数不能直接进行位运算)

五、深度剖析位运算

不同类型的本质在于:

占用的内存大小不同,如:short占用2字节,int占用4字节

表示具体数据的方式不同

  • 正整数用原码表示,负整数用补码表示
  • 整数型和浮点型的二进制表示不同

位运算时需要明确的知道的事

  • 操作数的类型(占用的内存大小)
  • 操作数是正数还是负数(符号位,数据表示)
  • 不同类型的操作数先自动对齐再进行位运算(补符号位)

如下面的一段代码:

short a = 1;
int b = 4;
int c = a | b;
printf("c = %d\n",c);

b为int类型,占4个字节,a为short类型,占2个字节。所以a要先要补符号位,由于a是正数,所以补0,这样就可以进行位运算了,得出c的结果为5。

下面来看一段代码:

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

下面为输出结果:

小结论

  • 正数符号位为0,右移运算时,高位补0,低位移除
  • 负数符号位为1,右移运算时,高位补1,低位移除
  • 左移运算时,最高位移除,低位补0
  • 最高位的具体位置,由数据类型决定

类型补充小知识

  • char 字符型,一个字节的整型,范围[-128,127]
  • 字符数据(单引号括起来的字符)的本质是整型数
  • char类型的变量可以打印为整数或者字符

再看一段代码:

#include <stdio.h>
int main()
{
    char c = 'A';
    short a = c;
    int b = c;
    printf("c = %c\n", c);
    printf("c = %d\n", c);
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    c = 0x40;
    printf("c = %x\n", c);
    printf("c = %d\n", c);
    c = c << 1;
    printf("c = %d\n", c);
    c = c << 1;
    printf("c = %d\n", c);
    return 0;
}

下面为输出结果:

需要注意的是,因为c为char类型,所以64左移1位后,用二进制表示为1000 0000,最高位的1表示符号位,所以就是-128。

小结

  • 不同类型的本质区别是:占用内存不同,数据表示不同
  • 右移运算时,高位补符号位,低位移除
  • char是只占用一个字节的整型,可表示英文字符
  • 数据符号位的具体位置由数据类型决定

到此这篇关于C语言中各种运算类型全面总结的文章就介绍到这了,更多相关C语言运算类型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言中各种运算类型全面总结

本文链接: https://www.lsjlt.com/news/146828.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言中各种运算类型全面总结
    目录一、概述二、四则运算三、关系运算四、逻辑运算与位运算五、深度剖析位运算一、概述 C语言中支持下面4种类型的运算 运算类型运算符四则运算+,-,*,/,%关系运算<,>...
    99+
    2024-04-02
  • c语言中有哪些运算种类
    c 语言中的运算种类包括:算术运算:加法、减法、乘法、除法、求余、自增、自减比较运算:等于、不等于、大于、小于、大于等于、小于等于逻辑运算:与、或、非按位运算:按位与、按位或、按位异或、...
    99+
    2024-05-08
    c语言
  • c语言中缺省参数的类型总结
    1、函数全缺省参数,函数在定义或者声明时,所有的形参都默认值。 #include <stdio.h> //x,y为函数的形参,如果函数被调用时,没有设置x和y值,x值...
    99+
    2024-04-02
  • C语言中的运算类型有哪些
    这篇文章主要介绍“C语言中的运算类型有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言中的运算类型有哪些”文章能帮助大家解决问题。一、概述C语言中支持下面4种类型的运算运算类型运算符四则运算...
    99+
    2023-06-30
  • C语言数组全面总结梳理
    目录一,一维数组1.创建和初始化2.使用下标访问3.在内存中的存储二,二维数组 1.创建和初始化2.使用下标访问3.在内存中的存储三,越界问题数组(array)是由一系列类...
    99+
    2024-04-02
  • C语言中位运算符"|"的5种高级用法总结
    目录前言一、将两个字节合并成一个16位整数二、将一个字节的低4位和高4位交换三、将一个字节中的某些位置1四、将一个字节中的某些位置0五、将低位连续的0变为1小结前言 在上一篇文章中,...
    99+
    2023-05-15
    C语言位运算符I用法 C语言位运算符I C语言位运算符
  • go语言中time包的各种函数总结
    目录前言时间类型Location和time zone时间间隔AddsubBeforeAfter定时器时间格式化时间格式化的时间总结前言 在我们开发的过程中,每个项目都需要时间这一类的...
    99+
    2023-05-16
    golang time包 go语言 time go语言time包
  • C语言各类操作符全面讲解
    目录1 算术操作符2 移位操作符3 位操作符4 赋值操作符5 单目操作符5.1 ! 逻辑反操作5.2 sizeof 和数组6 关系操作符7 逻辑操作符8 条件操作符9 逗号表达式10...
    99+
    2024-04-02
  • C#中各种泛型集合的使用方法总结
    本篇体验除Queue<T>和Stack<T>之外的其它泛型集合。 SortedList<TKey, TValue> SortedList<T...
    99+
    2022-11-13
    C# 泛型集合
  • 【总结】golang中各种数据类型间的转换方法
    随着互联网和技术的发展,数据分析和处理的需求越来越大。在数据分析和处理中,往往需要对数据进行转换,以便更好地进行分析和处理。而golang作为一门高效且简洁的编程语言,提供了丰富的数据转换方法和工具。本文将介绍golang中各种数据类型间的...
    99+
    2023-05-14
  • Go语言中,如何处理各种数据类型?
    Go语言是一种强类型语言,它支持各种数据类型,包括整型、浮点型、字符型、布尔型、字符串、数组、切片、映射、结构体等等。在Go语言中,使用这些数据类型来完成各种任务是非常常见的。 在本文中,我们将探讨Go语言中如何处理各种数据类型,并提供一...
    99+
    2023-10-01
    重定向 数据类型 shell
  • c#语言中变量包含哪几种类型各有什么特点
    c# 中支持的值类型包括整数、浮点、布尔、字符和枚举类型;引用类型包括类、接口、数组和字符串。值类型存储在栈上,复制时创建副本,而引用类型存储在堆上,复制时创建指向原始数据的另一个引用。...
    99+
    2024-04-04
    c#
  • C语言运算符深入探究优先级与结合性及种类
    目录1、常用运算符分类2、算术运算符3、赋值运算符4、比较运算符5、逻辑运算符6、运算符优先级7、运算关系转换1、常用运算符分类 2、算术运算符 代码: #include <...
    99+
    2024-04-02
  • Go 语言中的类型 introspection:全面指南
    go 语言中的类型 introspection 使用反射机制,包括 reflect.type 和 reflect.value,允许获取类型信息、检查字段和方法、修改值,在将 json 转...
    99+
    2024-04-08
    go语言 类型内省
  • C语言自定义类型全面系统理解
    目录一、结构体1.结构体的声明局部结构体变量全局结构体变量2.特殊声明3.结构体的自引用4.结构体变量的初始化5.结构体内存对齐 6.修改默认对齐数7.结构体传参传址调用原因:二、位...
    99+
    2024-04-02
  • C语言中的运算符和结合性问题
    目录C语言运算符和结合性从上表中可以大致归纳出各类运算符的优先级总结C语言运算符和结合性 优先级运算符含义要求运算对象的个数结合方向1()圆括号自左至右1[]下标运算符自左至右1-&...
    99+
    2023-03-03
    C语言运算符 C语言结合性 C语言运算
  • 弱类型语言javascript中a,b运算的示例分析
    小编给大家分享一下弱类型语言javascript中a,b运算的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:下...
    99+
    2024-04-02
  • 深入解析Go语言中各种运算符的优先级排序方法
    深入解析Go语言中各种运算符的优先级排序方法在Go语言中,运算符的优先级决定了表达式中运算符的计算顺序。正确理解运算符的优先级是编写高效代码的关键之一。本文将深入解析Go语言中各种运算符的优先级排序方法,并提供具体的代码示例。一、算术运算符...
    99+
    2023-12-23
    运算符优先级 Go语言运算符 优先级排序方法
  • C语言中分支和循环的6种实现形式总结
    目录真假1.if语句2.switch语句3.while循环4.for循环5.do while循环6.goto语句总结C语言时一门结构化的程序设计语言,本篇博客主要讲解C语言中的分支和...
    99+
    2023-05-15
    C语言分支 循环实现形式 C语言分支 循环 C语言分支 C语言 循环
  • 如何进行C语言数据结构与算法中的排序总结
    这篇文章将为大家详细讲解有关如何进行C语言数据结构与算法中的排序总结,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、前言学习目标:排序和查找密不可分,将待处理的数据按关键值大小有序排列后,...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作