【一篇文章带你重温重点】C语言操作符

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

【一篇文章带你重温重点】C语言操作符

  • 文章目录
    • 🚲算术操作符
    • 🚲移位操作符
    • 🚲位操作符
    • 🚲赋值操作符
    • 🚲单目操作符
    • 🚲关系操作符
    • 🚲逻辑操作符

🚲算术操作符

加( + ) 减( - )乘( * )除( / ) 取模( % )

算术操作符是我们日常用的最多的,也是大家最熟悉不过的。

🌟要注意以下几点

1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。

2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。

3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

典型错误
【一篇文章带你重温重点】C语言操作符


🚲移位操作符

移位操作符分左移和右移

<< 左移操作符
>> 右移操作符

_
🌟注:移位操作符的操作数只能是整数。而且是针对二进制补码进行移动

1.左移操作符

它的移位规则:

左边抛弃、右边补0

【一篇文章带你重温重点】C语言操作符


2.右移操作符

移位规则:

首先右移运算分两种:

1. 逻辑移位
左边用0填充,右边丢弃

2. 算术移位
左边用原该值的符号位填充,右边丢弃

那计算机采用的是逻辑移位,还是算术移位呢???
正确答案是取决于编译器,不过大部分编译器的是采用算术移位,因为这样意义才大!!

先补充一些计算机存储数据的知识

在计算机中存储数据是按二进制的补码进行存储的
补码的转换公式=原码取反加一!
正数的原码反码补码是一样的!!!!!!

假设编译器是逻辑移位
【一篇文章带你重温重点】C语言操作符


正数右移

【一篇文章带你重温重点】C语言操作符


负数右移

【一篇文章带你重温重点】C语言操作符

所以说,只有当右移位算术移位才有实际意义,比如我们上面把-4右移,其实就是让它除2,变成-2,而逻辑右移则将这个数变成一个非常大的正数,那它的意义何在呢?

🚲位操作符

位操作符有:

& -------- 按位与
| --------- 按位或
^ -------- 按位异或
🌟注:他们的操作数必须是整数。

通过一些练习题来理解它是最好不过的方法!

#include <stdio.h>
int main()
{
	int num1 = 1;
	int num2 = 2;
	int a=num1& num2;
	int b=num1 | num2;
	int c=num1^ num2;

	printf("a=%d  b=%d  c=%d", a, c, b);

	return 0;
}

上面结果:a=0,b=3,c=3
解释如下
【一篇文章带你重温重点】C语言操作符

有个小结论:任何数与0异或等于任何数,比如10^0=10
任何数与自己异或等于0,比如10^10=0
而且它们满足交换律,比如10^ 4 ^ 10= 10^ 10 ^4=0 ^ 4=4

至于为什么是这样,其实跟上面图的num1^num2一样的分析方法,自己可以尝试画一下图理解,有了这个结论就可以做一下下面这道面试题

曾经有一道变态面试

不能创建临时变量(第三个变量),实现两个数的交换。
【一篇文章带你重温重点】C语言操作符

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	printf("交换前a = %d b = %d\n", a, b);//
	a = a ^ b;	// 其实就是a=10^20,先不用算结果
	b = a ^ b;	//然后现在b=a^b=10^20^20,所以就变成b=10^0=10

	a = a ^ b;	//这里就是a= 10 ^ 20 ^ b = 10 ^ 20 ^ 10
				//用交换律就等于10 ^ 10 ^ 20 = 0 ^ 20 = 20
	printf("交换后a = %d b = %d\n", a, b);//这样两个数就交换过来了
	

	return 0;
}

🚲赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。

我们创建变量并赋值叫初始化,而后面才叫赋值
【一篇文章带你重温重点】C语言操作符


复合赋值符

+=
–=
*=
/=
%=
>>=
<<=
&=
|=
^=

上面的都像下图一样等价比如a*=2 等价于a=a*2
【一篇文章带你重温重点】C语言操作符


🚲单目操作符

! ------------ 逻辑反操作
- ------------ 负值
+ ----------- 正值
& ------------取地址
sizeof ------操作数的类型长度(以字节为单位)
~ ------------ 对一个数的二进制按位取反
------------前置、后置–
++ ----------前置、后置++
* ------------ 间接访问操作符(解引用操作符)
(类型) ------ 强制类型转换

主要要注意的是前置和后置的区别

【一篇文章带你重温重点】C语言操作符


🚲关系操作符

>
>=
<
<=
!= ----------- 用于测试“不相等”
== ---------- 用于测试“相等”

关系操作符比较简单,最主要的就是下面这个
警告:
在编程的过程中== 和=不小心写错,导致的错误

【一篇文章带你重温重点】C语言操作符


🚲逻辑操作符

&& ------------ 逻辑与
|| --------------- 逻辑或

注意:
区分逻辑与和按位与
区分逻辑或和按位或

1&2----->0--------按位与


1&&2---->1-------逻辑与 两边的数为真,表达式就为真


1|2----->3---------按位或


1||2---->1----------逻辑或 其中一方为真,则表达式为真

逻辑操作符常常用于条件判断语句,比如想判断一个是是否大于100,并且小于200
【一篇文章带你重温重点】C语言操作符

逻辑操作符还有一个最重要的点就是‘“短路”
用一道题理解

一道360笔试题

#include <stdio.h>
int main()
{
    int i = 0,a=0,b=2,c =3,d=4;
    i = a++ && ++b && d++;
    //i = a++||++b||d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0;
}
//程序输出的结果是什么?

a=1,b=2,c=3,d=4
根据短路原则,只有a++运算了,其余没有进行运算
【一篇文章带你重温重点】C语言操作符文章来源地址https://www.toymoban.com/news/detail-415584.html

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

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

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

相关文章

  • 一篇文章带你入门HBase

    本文已收录至Github,推荐阅读 👉 Java随想录 微信公众号:Java随想录 目录 HBase特性 Hadoop的限制 基本概念 NameSpace Table RowKey Column TimeStamp Cell 存储结构 HBase 数据访问形式 架构体系 HBase组件 HBase读写流程 读流程 写流程 MemStore Flush 参数说明 StoreFile Compaction 参数说明 触发过程

    2024年02月08日
    浏览(62)
  • 一篇文章,带你彻底掌握接口测试!

    一、什么是接口测试? 所谓接口,是指同一个系统中模块与模块间的数据传递接口、前后端交互、跨系统跨平台跨数据库的对接。而接口测试,则是通过接口的不同情况下的输入,去对比输出,看看是否满足接口规范所规定的功能、安全以及性能方面的要求。 二、为什么要

    2024年02月10日
    浏览(53)
  • 一篇文章带你快速认识区块链(必看)

           区块链技术,这一划时代的分布式账本技术,正在全球范围内掀起一场深度的信任与协作模式变革。区块链如同一部由多方共同维护的公开而又安全的大账本,每一笔交易都被打包成一个区块,通过高级密码学手段确保传输和访问安全,并按照时间顺序串联起来,形

    2024年04月25日
    浏览(61)
  • 一篇文章带你了解什么是JDK

    JDK(Java Development Kit)是Java开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源。下面是JDK的一些重点介绍: Java编译器(javac):JDK包含了Java编译器,可以将Java源代码编译为Java字节码。通过编译器,开发人员可以将Java源代码转换为可在JVM上运行的字节码文

    2024年03月19日
    浏览(98)
  • 一篇文章带你了解什么是图灵完备

    图灵完备(Turing-complete)是一个计算机科学中的概念,它指的是一种计算模型能够模拟任何其他计算模型的能力。这意味着,只要一种计算模型是图灵完备的,那么它就能够完成任何可计算的任务。 图灵完备是指一种计算机语言或计算模型具有足够的能力来模拟图灵机的所有

    2024年02月15日
    浏览(48)
  • 一篇文章带你了解SpringBoot目录结构

    前言 SpringBoot是整合Spring技术栈的一站式框架,是简化Spring技术栈的快速开发脚手架,是一个能够快速构建生产级别的Spring应用的工具。SpringBoot是目前流行的微服务框架,倡导“约定优于配置”,简化Spring项目搭建及开发过程。springboot提供了很多核心的功能,比如自动化配置

    2024年03月25日
    浏览(71)
  • 一篇文章带你搞懂前端Cookie

    浏览器Cookie相信各位点进这篇文章的小伙伴应该不陌生了,它是前端领域中一个非常重要的内容,当然也是面试的一个考点,不知道各位小伙伴是否真正掌握了Cookie呢?当然没有掌握也是没有关系的,可以跟着小编的脚步一起来学习一下前端Cookie,没有熟练掌握的小伙伴看完这

    2024年02月04日
    浏览(46)
  • 一篇文章带你实现栈的接口

    栈(Stacks)是限定在一端插入和删除的线性表。允许插入和删除的一端称为栈顶(Top),另一端称为栈底(Bottom)。栈中的数据元素遵守后进先出(Last In First Out)的原则。因此,栈又称为后进先出(先进后出)线性表。 压栈:栈的插入操作叫做进栈、压栈、入栈,入数据在

    2024年02月13日
    浏览(51)
  • 一篇文章带你走进Java(保姆级)

    手打不易,希望对各位还在徘徊学什么语言的有帮助!!java不会让你失望!! Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。 Java还是有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持

    2024年02月15日
    浏览(54)
  • 【C++】一篇文章带你深入了解list

    list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 list与forward_list非常相似:最主要的不同在

    2024年04月23日
    浏览(56)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包