C语言:详解操作符(上)

摘要:

本篇,我们将学习C语言中操作符的相关内容,操作符是C语言中重要的元素之一,在我们的代码中处处都有,下面我们将详细介绍操作符的相关内容,并结合一些代码例题加深印象。

目录

一、操作符的分类及介绍

二、进制转换

1、二进制转十进制

         2、二进制转八进制和十六进制

三、 原码、反码、补码

四、移位操作符

1、左移操作符

2、右移操作符

五、位操作符:&、|、^、~

思考题1答案

思考题2答案

思考题3答案


一、操作符的分类及介绍

· 算数操作符:+、-、、/、%
· 移位操作符:<<、>>
· 位操作符:&、|、^ ·
赋值操作符:=、+=、-=、
=、/=、%=、<<=、>>=、&=、|=、^= ·
单目操作符:!、++、–、&、*、+、-、sizeof(类型)
· 关系操作符:>、>=、<、<=、==、!=
· 逻辑操作符:&&、||
· 条件操作符:? :
· 逗号操作符:,
· 下标引用操作符:[ ]
· 函数调用:()
· 结构体成员访问:·、->

这些操作符操作符的中算数操作符,赋值操作符等我已经在之前整理过
算数操作符及算数表达式详解,有疑问的可以点击进去查看,本文主要讲述位移操作符等涉及二进制位的操作符的有关内容,下面我们先讲解一下进制转换。

二、进制转换

我们应该都听说过计算机只能识别0和1,即计算机的内部是按二进制的,但我们通常接触的都是十进制,八进制,或者十六进制。那它们之间的关系是什么呢?又该如何相互转换呢?
其实很简单,二进制的实质就是满2进1、八进制的实质就是满8进1……以此类推,下面我们将详细介绍它们之间应该如何转换

1、二进制转十进制

二进制位每一位分别对应的是1,2,4,8,16,通过观察可以知道,二进制每一位对应的实则就是2的次方数。

如二进制11111111对应的十进制就是377:
在这里插入图片描述

2、二进制转八进制和十六进制

二进制转八进制和十六进制本质上跟二进制转化成十进制本质上一样,就是权数上的差异罢了,但是二进制转换为八进制十六进制是有一些技巧的,三个二进制数字能表示一个八进制数字,四个二进制数字能表示一个十六进制数字。

比如二进制数字11111111,它对应的八进制和十六数字如下:

在这里插入图片描述

三、 原码、反码、补码

整数在内存中的二进制表示形式有原码、反码、补码
对于一个int类型的整形数字,有四个字节即三十二个比特位
00000000000000000000000000000000,其中第一个数字是符号位,如果是1表示是负数,是0表示整数
原码:原码就是十进制数字所对应的二进制数字
反码:反码是原码所有数字取反,如原码为0101,则反码为1010
补码:补码是反码加一,也是数字在电脑中的存储形式

由补码求原码也是相同的操作,即先取反,再加1

四、移位操作符

<< 左移操作符 、>>右移操作符
注意:位操作符只能对整数适用

1、左移操作符

移动规则:左边抛弃,右边补0

#include<stdio.h>
int main()
{int a = 2;printf("%d", (a << 1));return 0;
}

思考一下,所有二进制数字左移1次的时候,有没有乘于2的效果?

2、右移操作符

右移操作符包括两种:算数右移和逻辑右移
其中采用哪种右移方式取决于编译器,市面上常见的编译器都是算数右移

1、逻辑右移:左边用0补充,右边舍去
2、算数右移:左边用原值的符号位补充,右边舍去

算数右移例题:

#include<stdio.h>
int main()
{int a = 4;printf("%d", (a >> 1));return 0;
}

运行结果:2
思考一下,所有二进制数字右移1次的时候,有没有除于2的效果?

五、位操作符:&、|、^、~

位操作符:

1 & //按位与
2 | //按位或
3 ^ //按位异或
4 ~ //按位取反

需要记住的是,位操作符也只能适用于整数
用法通过代码呈现:

#include<stdio.h>
int main()
{int num1 = 3;int num2 = 5;printf("%d\n", num1 & num2);printf("%d\n", num1 | num2);printf("%d\n", num1 ^ num2);printf("%d\n", ~0);return 0;
}

通过上述这段代码可以让我们对这几个操作符有一个初步的认识,下面给出几个思考题,请结合自己的理解做答,(答案后期我会追加一篇博客讲解,以便理解,如果需要可以点个关注)


思考题:
1、不创建临时变量(第三个变量),如何实现两个数交换
2、编写代码实现:求一个整数存储在内存中的二进制中1的个数
3、二进制位置0或者置1

思考题1答案

#include<stdio.h>
int main()
{int a = 3;int b = 5;printf("交换前:a=%d,b=%d\n", a, b);a = a ^ b;b = a ^ b;a = a ^ b;printf("交换后:a=%d,b=%d\n", a, b);return 0;
}

思考题2答案

//方法一
#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);int count = 0;for (int i = 0; i < 32; i++){if (n >> i & 1 == 1)count++;}printf("%d", count);return 0;
}//方法二
#include<stdio.h>
int main()
{int n = 0;int count = 0;scanf("%d", &n);while (n){n = n & (n - 1);count++;}printf("%d", count);return 0;
}

思考题3答案

//二进制位置0或者置1#include<stdio.h>
int main()
{int n = 13;n |= (1 << 4);//把第五位改成1printf("%d\n", n);n = n & (~(1 << 4));//把第五位改成0printf("%d", n);return 0;
}

结语:

操作符的相关内容还是很多的,这里我们只是讲了一部分,剩下的一些留在下篇再讲,让子弹再飞一会儿

创作不易,还请点赞收藏加关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/666221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Matplotlib】figure方法之图形的保存

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;matplotlib &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

学成在线:媒体资源管理系统(MAM)

媒体资源管理系统(MAM) 媒体资源管理系统(Media Asset Management)是建立在多媒体、网络、数据库和数字存储等先进技术基础上的一个对各种媒体及内容进行数字化存储、管理以及应用的总体解决方案,可以满足媒体资源拥有者收集、保存、查找、编辑、发布各种信息的要求,为媒体资源…

css1文本属性

一.颜色&#xff08;color&#xff09;&#xff08;一般用16进制&#xff09; 二.对齐&#xff08;text-align) 三.装饰&#xff08;text-decoration&#xff09; 四.缩进&#xff08;text-indent&#xff09;&#xff08;一般用2em&#xff09;&#xff08;有单位&#xff09;…

电商数据采集:选择爬虫工具还是第三方API?

电商商家最常唠叨的就是店铺运营难做。每日多平台店铺数据统计汇总繁琐耗时&#xff0c;人工效率偏低&#xff0c;且工作内容有限。 特别是眼下“618大促”将至&#xff0c;如何提高运营的效率和质量、保证产品及服务的良性运作&#xff0c;是电商企业急需解决的难题。 01 数…

thinkadmin的form.html表单例子

<style>textarea {width: 100%;height: 200px;padding: 10px;border: 1px solid #ccc

洗袜子的小型洗衣机哪种好?质量好的迷你洗衣机推荐

随着生活水平的提高&#xff0c;消费者对生活质量的要求也越来越高&#xff0c;越来越多的人开始追求更加舒适、干净的生活。在脚部保健方面&#xff0c;袜子往往是人们关注的重点。袜子洗衣机就是一种专门用于清洗袜子的洗衣机&#xff0c;可以将各种材质的袜子在短时间内进行…

Java设计模式 – 四大类型

设计模式 – 四大类型 创建型模式结构型模式行为型模式J2EE模式 设计模式&#xff08;Design pattern&#xff09;是重构解决方案 根据书Design Patterns – Elements of Reusable Object-Oriented Software&#xff08;中文译名&#xff1a;设计模式 – 可复用的面向对象软件元…

图论练习1

内容&#xff1a;&#xff0c;拆点&#xff0c;分层&#xff0c;传递&#xff0c;带限制的最小生成树 [HNOI2015]菜肴制作 题目链接 题目大意 有个限制&#xff0c;号菜肴在号前完成在满足限制的条件下&#xff0c;按照出菜( 是为了满足的限制 ) 解题思路 由限制&#xf…

Redis-缓存问题及解决方案

本文已收录于专栏 《中间件合集》 目录 概念说明缓存问题缓存击穿问题描述解决方案 缓存穿透问题描述解决方案 缓存雪崩问题描述解决方案提高缓存可用性过期时间配置熔断降级 总结提升 概念说明 Redis是一个开源的内存数据库&#xff0c;也可以用作缓存系统。它支持多种数据结构…

解锁MyBatis Plus的强大功能:学习高级操作与DML技巧!

MyBatisPlus 1&#xff0c;DML编程控制1.1 id生成策略控制知识点1&#xff1a;TableId1.1.1 环境构建1.1.2 代码演示AUTO策略步骤1:设置生成策略为AUTO步骤3:运行新增方法 INPUT策略步骤1:设置生成策略为INPUT步骤2:添加数据手动设置ID步骤3:运行新增方法 ASSIGN_ID策略步骤1:设…

海量数据处理商用短链接生成器平台 - 2

第二章 短链平台项目创建git代码管理开发分层规范 第1集 短链平台实战-Maven聚合工程创建微服务项目 **简介&#xff1a;Maven聚合工程创建微服务项目实战 ** Maven聚合工程拆分 dcloud-common 公共依赖包 dcloud-app FlinkKafka实时计算 dcloud-account 账号流量包微服务 dc…

一分钟了解电脑关机快捷键是什么!

在日常使用电脑的过程中&#xff0c;了解一些基本的快捷键是提高效率的关键之一。其中&#xff0c;电脑关机快捷键是一个方便且迅速的操作&#xff0c;使您可以在不用通过烦琐的菜单操作的情况下&#xff0c;快速关机电脑。在本文中&#xff0c;我们将探讨电脑关机快捷键是什么…

C++初阶:适合新手的手撕string类(模拟实现string类)

上次讲了常用的接口&#xff1a;C初阶&#xff1a;初识STL、String类接口详细讲解&#xff08;万字解析&#xff09; 今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.构造函数&#xff08;constructor)2.1构造函数2.1.1无参有参分开2.1.2利用缺省参数合起来 2.2拷贝构…

Pyecharts炫酷散点图构建指南【第50篇—python:炫酷散点图】

文章目录 Pyecharts炫酷散点图构建指南引言安装Pyecharts基础散点图自定义散点图样式渐变散点图动态散点图高级标注散点图多系列散点图3D散点图时间轴散点图笛卡尔坐标系下的极坐标系散点图 总结&#xff1a; Pyecharts炫酷散点图构建指南 引言 在数据可视化领域&#xff0c;…

[C++]:15.继承

继承 一.继承&#xff1a;1.继承的概念和基本操作&#xff1a;1.概念&#xff1a;2.基本操作&#xff1a; 2.继承格式和多种继承方法&#xff1a;1.基本继承格式&#xff1a;2.继承关系访问限定符 3.子类对象和父类对象之间的赋值&#xff1a;1.为什么存在赋值兼容转换&#xf…

第十二篇【传奇开心果系列】Python的OpenCV技术点案例示例:视频流处理

传奇开心果短博文系列 系列短博文目录Python的OpenCV技术点案例示例短博文系列短博文目录一、前言二、视频流处理介绍三、实时视频流处理示例代码四、视频流分析示例代码五、归纳总结系列短博文目录 Python的OpenCV技术点案例示例短博文系列 短博文目录 一、前言 OpenCV视频…

程序报错无法打开源文件stdafx.h

在运行代码时&#xff0c;代码中头文件突然报错程序无法打开源文件stdafx.h include “stdafx.h”,编译器就说无法打开源文件&#xff0c;直接上干货解决方法是&#xff1a; 1.打开项目 ->项目属性&#xff08;最后一个&#xff09;-> C/C ->常规&#xff0c; 2在附…

【工作周志】240129-240204

本周学习了AXI相关的内容 AMBA &#xff08;Advanced Microcontroller Bus Architecture&#xff09; AXI &#xff08;Advanced eXtensible Interface&#xff09; ARM公司提出&#xff0c;AMBA3.0协议中重要组成部分&#xff0c;是一种面向高性能、高带宽、低延迟的片内总线…

【c++】vector用法详解

vector用法详解 vector定义vector容器的构造函数vector容器内元素的访问1.通过下标 [ ]来访问2.通过迭代器来访问3.通过范围for来访问 vector常用函数的用法解析1.size()2.clear()3.capacity()4.reserve()5.resize()6.shrink_to_fit()7.pop_back()8.push_back()9.erase()10.in…

python基于django的公交线路查询系统mf383

1.个人信息的管理&#xff1a;对用户名&#xff0c;密码的增加、删除等 2.线路信息的管理&#xff1a;对线路的增加、修改、删除等 3.站点信息的管理&#xff1a;对站点的增加、修改、删除等 4.车次信息的管理&#xff1a;对车次的增加、修改、删除等 5.线路查询、站点查询 …