C语言【运算符】

这篇具有很好参考价值的文章主要介绍了C语言【运算符】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C语言【运算符】

1、运算符分类
  • 按照操作个数分类:

    一元运算符(一目运算符):只有一个操作数。如 负号 -1。

    二元运算符(二目运算符):有两个操作数。如 加号 1+2。

    三元运算符(三目运算符):有三个操作数。如 ?: a>b?1:2。

  • 按功能分类:

    算数运算符:正(+)、负(-)、加(+)、减(-)、乘(*)、除(/)、取模(%)、自增(++)、自减(--)。

    赋值运算符:赋值(=)、相加赋值(+=)、相减赋值(-=)、相乘赋值(*=)、相除赋值(/=)、取余赋值(%=)、左移赋值(<<=)、右移赋值(>>=)、按位与赋值(&=)、按位异或赋值(^=)、按位或赋值(|=)。

    int te = 0;
    // if里是赋值
    if(te = 0){     		// te=0 的结果为所赋的0
    	printf("abcdefg");	// 不会执行
    }
    
    // 连续赋值
    int a = b = c = 6;	// 从右往左赋值,a、b、c都为6
    
    // 相乘赋值+连续赋值
    int a = 2;
    int c; 	// 下面中间那个c得提前定义。
    int b = c = a*=3;  	// a、b、c都为6
    

    ​ 赋值运算符一般是从右往左运算。运算方向是当表达式中出现多个该运算符时每个运算符的操作顺序。

    关系运算符:相等(==)、不等(!=)、小于(<)、大于(>)、小于等于(<=)、大于等于(>=)。

    ​ 关系运算符的结果为0或1

    逻辑运算符:逻辑与(&&)、逻辑或(||)、逻辑非(!)

    ​ 逻辑与(&&)也叫短路与,如果&&前面的表达式为0时,后面的表达式不作运算,直接返回为0;

    ​ 逻辑或(||)也叫短路或,如果||前面的表达式为1时,后面的表达式不作运算,直接返回1。

    ​ 在表达式前加逻辑非时记得给表达式加括号。

    ​ 逻辑运算符的结果为0或1

    位运算符:按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、按位左移(<<)、按位右移(>>)

    左移n位就相当于乘2的n次方右移n位就相当于除以2的n次方

    int a = 10;
     a >> 3;		// a不发生改变,因为没有再赋值给a
    
    int b = 10;
    b = b >> 3; 	// b在原来的基础上缩小了2的3次方。 10 / 3 = 1
    
    int y = -10;
    y = y >> 2;
    printf("%d\n", y);		// -3        
    //   -10 / 4 = -2...-2     把商的-2退为-3, 即 -10 / 4 = -3...2
    

    负整数的除法和右移操作结果并不一样,如下:

    int z = -10 / 4;
    printf("%d\n", z);	// -2
    

    左移时出现的溢出问题:左移时,会出现结果大过所接收值类型范围导致溢出。

    // 第一种情况,如果只关心输出结果,而不关心是不是在类型范围内,可以在输出时使用大格式,把超出的看作有效
    int num_max = 0x7fffffff;
    num_max  = num_max<<2;   	// 乘4,已经超过了int能表示的范围
    printf("%lld", num_max);  	// 输出时使用 %lld 把超出的范围也视作有效
    
    // 第二种情况,就是想知道溢出后在有效范围内为多少,也就是这个数的实际值,可以看作对类型能表示的个数取余
    int num_max = 0x7fffffff;
    num_max  = num_max<<2;   	// 实际结果8589934588,超了。 8589934588 % int能表示的个数(4294967296) = 4294967292。   num_max类型为有符号int, 4294967292最高位为1,转换为原码为-4,所以num_max为-4。在内存种这32位里存的就是4294967292的二进制形式。
    printf("%d", num_max);  	//  %d 表示有符号int, 4294967292最高位为1,转换为原码为-4,输出-4
    

     有符号数右移时,对于负数,前面空出来的位全补1;对于正数,前面空出来的位全补0。

    遗留问题:按位异或可以实现交换两个变量的值,如何实现的?原理是什么?

2、运算符的优先级

​ 具体的不作了解,使用时不确定就用括号。

​ 总体来说:一元运算符 > 算数运算符 > 关系运算符 > 逻辑运算符 > 三元运算符 > 赋值运算符

从右到左运算是指同一表达式出现多次同一运算符时,运算的方向。

​ 右到左的运算符有: 赋值号、?: 等。

​ 说一下 ?: 比如 max = a>b ? a : b>c ? b:c; 先计算b>c ? b:c作为‘else’的值。还是建议加上括号。

3、记几个整型和浮点型之间的运算。
// 整型的除法运算
int num01 = 10;
int num02 = 3;
int num03 = num01 / num02;	// 3
// 浮点型接收整型的运算
float num04 = 10 / 3;	// 断点调试此处为3, printf用%f输出时记得补6位小数

问题:上行代码的num04如果用%f输出是3.000000,如果用%d输出呢?我试了试是0。为什么?

// 浮点型与整型的运算
float num05 = (float)10 / 3;	// 3.33333325
printf("%f\n", num05);		// printf用%f输出时保留6位小数为3.333333
// 浮点数参与的运算其实是四舍五入的,手动保留小数时也是四舍五入
float num06 = (float)20 / 3; 	//     6.66666651
printf("%f\n", num05);		// 6.666667
4、取余(%)操作时,余数的符号跟着被除数(前面的数)的符号。
5、关于自增(++)和 自减(--)

​ 不多解释,举个特别的例子。

/**
	i=i++时
	第一步:将i的值放到临时空间,作为后续运算的依据
	第二步:将i的值+1
	第三步:将临时空间里存进去的值拿出来赋给i (如果是j=i++时这一步就是赋给j)
*/
int i = 1;
i = i++;
printf("%d\n", i);	 // 1
/**
	i = ++i时
	不多解释,上面步骤 二、一、三
*/
int i = 1;
i = ++i;
printf("%d\n", i);	// 2

注意:以上这两种情况在gcc可以编译通过,在clang编译器编译时就会报错。文章来源地址https://www.toymoban.com/news/detail-746324.html

到了这里,关于C语言【运算符】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言【运算符】

    1、运算符分类 按照操作个数分类: 一元运算符(一目运算符) :只有一个操作数。如 负号 -1。 二元运算符(二目运算符) :有两个操作数。如 加号 1+2。 三元运算符(三目运算符) :有三个操作数。如 ?: ab?1:2。 按功能分类: 算数运算符 :正(+)、负(-)、加(+)、

    2024年02月05日
    浏览(58)
  • Go 语言运算符

    文章目录 概要 整体架构流程 技术名词解释 技术细节 小结 🌟  欢迎来到 猫头虎的博客   — 探索技术的无限可能! 深入探索各技术领域,发现知识的交汇点。了解更多,请访问: - [ 猫头虎技术矩阵 ](https://bbs.csdn.net/topics/617720781) - [ 新矩阵备用链接 ](https://bbs.csdn.net/topi

    2024年02月05日
    浏览(40)
  • 操作符(运算符)详解

    🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 🐰算数操作符:+    -    *    /    % 🐰移位操作符:    🌸进制的定义  🌸整数二进制表示形式 🌸 左移操作符 🌸右移操作符 🐰位操作符:   |   ^    🌸(按位与)|(按位或)

    2024年01月19日
    浏览(51)
  • C语言中的除法运算符“/”与取模运算符“%”:深入解析与示例

    🔥温馨提示🔥:使用电脑端阅读,获取更好体验🚀 在C语言中, / 和 % 运算符是与除法相关的两个运算符,它们有以下特点: / (除法运算符): 用途:计算两个数之间的除法。 结果类型:如果两个操作数都是整型,结果也将是整型,且向下取整(即忽略小数部分,也称

    2024年03月15日
    浏览(88)
  • C 语言运算符详解

    运算符用于对变量和值进行操作。 在下面的示例中,我们使用 + 运算符将两个值相加: 虽然 + 运算符通常用于将两个值相加,就像上面的示例一样,它还可以用于将变量和值相加,或者将变量和另一个变量相加: C 将运算符分为以下几组: 算术运算符 赋值运算符 比较运算

    2024年02月04日
    浏览(46)
  • C语言运算符详解

    【导言】 C语言是一门非常底层的编程语言,它支持多种运算符进行数值运算、逻辑运算等操作。C语言中的运算符主要有算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符等。本篇文章将会详细介绍C语言中的各种运算符及其使用方法。 一、算术运

    2024年02月07日
    浏览(46)
  • 运算符详解(c语言)

    引言: hello,大家好!我是心跳sy,今天给大家分享c语言运算符详解,我们知道,c语言的一个显著特点就是表达式的应用,表达式是表示如何计算值的公式,而运算符又是构建表达式的基本工具,c语言拥有非常丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、赋

    2024年02月12日
    浏览(38)
  • C语言—位运算符

    目录 (位与,AND): |(位或,OR): 位取反(~): 左移(): 右移(): 语法: a b 作用:将两个整数的对应二进制位进行逐位与运算,如果对应位都为1,则结果对应位为1;否则为0。 语法: a | b 作用:将两个整数的对应二进制位进行逐位或运算,如果对应位中至少有一个为1,

    2024年02月07日
    浏览(33)
  • 位运算符及其相关操作详解

    前言:由于位运算符是直接对二进制数操作,因此对二进制、八进制、十六进制不甚了解的小伙伴建议先看这篇二进制、八进制、十六进制与十进制的相互关系,这样阅读本篇时将事半功倍 位运算是对 计算机存储的二进制序列的相应位进行操作 位运算的 操作数必须是整数型

    2024年02月05日
    浏览(42)
  • C语言关于&与&&运算符

    C语言关于与运算符 我们知道,在很多场景中和通常可以相互代替,那么它们到底有什么不同呢? 先看一段代码 使用clang++ -S编译出来的指令如下: 使用clang++ -S -O3编译出来的指令如下: 再看一段代码: 其汇编代码为: 反汇编一下: 通过对比两段汇编代码就很清晰了,运算

    2024年02月10日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包