C语言 —— 愿此世如黄金般辉煌 - 进制转换与操作符详解

目录

1. 操作符的分类

2. ⼆进制和进制转换

2.1 2进制转10进制

2.2 10进制转2进制

2.3 2进制转8进制

2.4 2进制转16进制

3. 原码、反码、补码

4. 移位操作符

4.1 左移操作符

4.2 右移操作符

5. 位操作符:&、|、^、~

5.1 & 按位与

 5.2 |  按位或

5.3 ^  按位异或

5.4 ~  按位取反

6. 结构成员访问操作符

 6.1 什么是结构体

6.2 结构体成员的直接访问

6.3 结构体成员的间接访问

7. 操作符的属性:优先级与结合性

7.1 优先级

7.2 结合性


1. 操作符的分类

1. 算术操作符:+   -   *   /   %
2. 移位操作符:<<   >>
3. 位操作符:&  |  ^
4. 赋值操作符:=  +=  -=  =  /=  %=  <<=  >>=  &=  |=  ^=
5. 单目操作符:!  ++  –  &  *  +   -   ~   sizeof  (类型)
6. 关系操作符:>  >=  <  <=  ==  !=
7. 逻辑操作符:&&  ||
8. 条件操作符:?:
9. 逗号表达式:,
10. 下标引用:[ ]
11. 函数调用:( )
12. 结构体成员访问: .      ->

 


 

2. ⼆进制和进制转换
 

其实我们经常能听到2进制、8进制、10进制、16进制这样的讲法,那是什么意思呢?其实2进制、8进制、10进制、16进制是数值的不同表⽰形式⽽已

二进制:

  

2进制中满2进1,2进制的数字每⼀位都是0~1的数字组成:
   

128  64  32  16  8  4  2  1

  

十进制12的二进制就是1100,也就是取上面8 4 2 1的前两位

2.1 2进制转10进制

10进制中的123,从右到左依次是个位,十位,百位,每一位都有自己的权重,每一位各自乘以各自的权重然后加和就是表示的值

2进制转换10进制的12也相同

2.2 10进制转2进制

2.3 2进制转8进制

8进制的数字每⼀位是0~7的,0~7的数字,各⾃写成2进制,最多有3个2进制位就⾜够了,⽐如7的⼆进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀个8进制位,剩余不够3个2进制位的直接换算

如:2进制的01101011,换成8进制:0153,0开头的数字,会被当做8进制

2.4 2进制转16进制

16进制的数字每⼀位是0~9,a ~f 的,0~9,a ~f的数字,各⾃写成2进制,最多有4个2进制位就⾜够了,⽐如 f 的⼆进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算

在16进制中,两位数用字母表示(大小写都可以)

  

10 = A/a        11 = B/b        12 = C/c        13 = D/d        14 = E/e        15 = F/f

如:2进制的01101011,换成16进制:0x6b,16进制表⽰的时候前⾯加0x


3. 原码、反码、补码

整数的2进制表示方法有三种,即原码、反码和补码

   
有符号整数的三种表示方法均有符号位和数值位两部分,2进制序列中,最⾼位的1位是被当做符号位,剩余的都是数值位

   
符号位都是⽤0表⽰“正”,⽤1表⽰“负”

正整数的原、反、补码都相同

负整数的三种表示方法各不相同

   
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码
补码:反码+1就得到补码

    
反码得到原码也是可以使用:取反,+1的操作

  

数据存放内存中其实存放的是补码


4. 移位操作符

移位操作符的操作数只能是整数,移动操作符移动的是二进制位

4.1 左移操作符

 移位规则:左边抛弃、右边补0,左移的效果和乘2类似

#include <stdio.h>int main()
{int num = 10;int n = num << 1;printf("n= %d\n", n);printf("num= %d\n", num);return 0;
}


4.2 右移操作符

与左移操作符的效果相反,右移的效果和除2类似

   

移位规则:右移运算分两种:

   
1. 逻辑右移:左边⽤0填充,右边丢弃

   

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

   

  

    

   

#include <stdio.h>int main()
{int num = 10;int n = num >> 1;printf("n= %d\n", n);printf("num= %d\n", num);return 0;
}

   

对于移位运算符,不要移动负数位,这个是标准未定义的

   

例如:

   

int num = 10;
num>>-1;

 


5. 位操作符:&、|、^、~

&    //按位与
|    //按位或
^    //按位异或
~    //按位取反

位操作符的操作数必须是整数

5.1 & 按位与

当两个对应的二进制位都为 1 时,结果位才为 1,否则为 0,也就是同1为1,不1为0

0000000000 0000000000 0000000001 11 a
0000000000 0000000000 0000011000 11 b0000000000 0000000000 0000000000 11 a & b

 5.2 |  按位或

当两个对应的二进制位中只要有一个为 1,结果位就为 1,当两个位都为 0 时,结果位才为 0

  

也就是有1为1,无1为0

0000000000 0000000000 0000000001 01 a
0000000000 0000000000 0000000000 11 b0000000000 0000000000 0000000001 11 a | b

5.3 ^  按位异或

当两个对应的二进制位不同(一个为 0,另一个为 1)时,结果位为 1,当两个位相同(都为 0 或都为 1)时,结果位为 0

   

也就是不同为1,相同为0

0000000000 0000000000 0000000001 01 a
0000000000 0000000000 0000000000 11 b0000000000 0000000000 0000000001 10 a ^ b

5.4 ~  按位取反

顾名思义,将每个二进制位中的 0 变为 1,1 变为 0

0000000000 0000000000 0000000001 01 a1111 1111 11 1111 1111 11 1111 1111 10 10 ~a


6. 结构成员访问操作符

   

 6.1 什么是结构体

结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如:
标量、数组、指针,甚⾄是其他结构体

结构体的语法结构:

struct tag
{member - list;}variable - list;

描述⼀个学生:

struct Stu{char name[20];//名字int age;//年龄 char sex[5];//性别char id[20];//学号 }; //分号不能丢

结构体的定义:

struct Point{int x;int y;}p1;        //声明类型的同时定义变量p1        
struct Point p2;    //定义结构体变量p2 

结构体的指定顺序初始化:

//指定顺序初始化
struct Point p3 = { 10, 20 };
struct Stu        //类型声明
{char name[15];//名字int age;//年龄
};
struct Stu s1 = { "zhangsan", 20 };//初始化
struct Stu s2 = { .age = 20, .name = "lisi" };//指定顺序初始化

结构体嵌套初始化:

struct Node
{int data;struct Point p;struct Node* next;}n1 = { 10, {4,5}, NULL };//结构体嵌套初始化
struct Node n2 = { 20, {5, 6}, NULL };//结构体嵌套初始化


6.2 结构体成员的直接访问
 

结构体成员的直接访问是通过点操作符(.)访问的,点操作符接受两个操作数

  

语法结构:结构体变量.成员名

#include <stdio.h>struct Point
{int x;int y;
}p = { 1,2 };int main()
{printf("x: %d y: %d\n", p.x, p.y);return 0;
}

 

6.3 结构体成员的间接访问

有时候我们得到的不是⼀个结构体变量,⽽是得到了⼀个指向结构体的指针

  

语法结构:结构体指针->成员名

#include <stdio.h>
struct Point
{int x;int y;
};int main()
{struct Point p = { 3, 4 };struct Point* ptr = &p;ptr->x = 10;ptr->y = 20;printf("x = %d y = %d\n", ptr->x, ptr->y);return 0;
}


7. 操作符的属性:优先级与结合性

优先级与结合性决定了表达式求值的计算顺序

7.1 优先级

优先级指的是,如果⼀个表达式包含多个运算符,哪个运算符应该优先执⾏,各种运算符的优先级是不⼀样的

  

举个例子:1 3 + 4 * 5;

  

上⾯⽰例中,表达式 3 + 4 * 5 ⾥⾯既有加法运算符( + ),⼜有乘法运算符( * )。由于乘法的优先级⾼于加法,所以会先计算 4 * 5 ,⽽不是先计算 3 + 4 

7.2 结合性

如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符是左结合,还是右结合,决定执⾏顺序

    

⼤部分运算符是左结合(从左到右执⾏),少数运算符是右结合(从右到左执⾏),⽐如赋值运算符( = )

一般来说:!> 算术运算符 > 关系运算符 > 逻辑运算(&& > ||) > 赋值运算符 

优先级链接:

  

C 运算符优先级 - cppreference.comhttps://zh.cppreference.com/w/c/language/operator_precedence 


如宝石般璀璨

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

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

相关文章

docker1

前言 技术架构 单机架构 应用数据分离架构 应用服务集群架构 读写分离/主从分离架构 写入主的时候&#xff0c;要同步Mysql从的数据才可以 冷热分离架构 写的时候要写入主和缓存数据库 读的时候先去缓存看有没有&#xff0c;没有的话就去从数据库读数据 主要就是看这个数据是…

Spring Boot整合ArangoDB教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、环境准备 JDK 17Maven 3.8Spring Boot 3.2ArangoDB 3.11&#xff08;本地安装或Docker运行&#xff09; Docker启动ArangoDB docker run -d --name ar…

从离散迭代到连续 常微分方程(Ordinary Differential Equation, ODE):梯度流

从离散迭代到连续 ODE&#xff1a;梯度下降与梯度流的奇妙联系 在机器学习和优化领域&#xff0c;我们常常使用离散的迭代算法&#xff08;如梯度下降&#xff09;来求解目标函数的最优解。然而&#xff0c;你是否想过这些离散步骤背后可能隐藏着连续的动态&#xff1f;常微分…

常见的 Git 命令

基础配置和信息查询 (Setup and Information) git config --global user.name “Your Name”: 配置全局用户名&#xff0c;用于 Git 提交记录。 git config --global user.email “your.emailexample.com”: 配置全局用户邮箱&#xff0c;同样用于 Git 提交记录。 git confi…

深度解析:视频软编码与硬编码的优劣对比

视频编码 一、基本原理与核心技术 压缩原理 通过时空冗余消除实现数据压缩&#xff1a; 空间冗余&#xff1a;利用帧内预测&#xff08;如DC/角度预测&#xff09;消除单帧内相邻像素相似性。时间冗余&#xff1a;运动估计与补偿技术&#xff08;ME/MC&#xff09;减少连续帧间…

蓝耘智算 + 通义万相 2.1:为 AIGC 装上 “智能翅膀”,翱翔创作新天空

1. 引言&#xff1a;AIGC 的崛起与挑战 在过去几年中&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术突飞猛进。AIGC 涉及了文本生成、图像创作、音乐创作、视频制作等多个领域&#xff0c;并逐渐渗透到日常生活的方方面面。传统的内容创作方式已经被许多人类创…

行为模式---中介者模式

概念 中介者模式是一种行为模式&#xff0c; 他的核心思想是通过引入一个中介者对象&#xff0c;将多个对象之间的复杂交互逻辑统一管理。每个对象只需要与中介者通信&#xff0c;而不需要直接与其他对象交互&#xff0c;从而降低系统的耦合度。 适用场景 对象之间交互复杂&…

百度移动生态事业群聚焦UGC战略,贴吧迎新调整

易采游戏网3月8日独家消息&#xff1a;近日据内部消息人士透露&#xff0c;百度移动生态事业群正积极将用户生成内容&#xff08;UGC&#xff09;作为新的战略重点。此举标志着百度对UGC价值的重视与重塑&#xff0c;同时也预示着其旗下重要平台——百度贴吧将迎来一轮重大的调…

C#模拟鼠标点击,模拟鼠标双击,模拟鼠标恒定速度移动,可以看到轨迹

C#模拟鼠标点击&#xff0c;模拟鼠标双击&#xff0c;模拟鼠标恒定速度移动&#xff0c;可以看到轨迹 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks;namespa…

QGIS提取全国景区经纬度的完整流程

一、数据获取与预处理 数据来源选择 全国A级景区数据可从各省文化和旅游厅官网、国家文化和旅游部网站或第三方GIS数据平台获取。推荐使用2020-2021年更新的矢量数据&#xff08;shp格式&#xff09;或Excel表格&#xff0c;其中包含景区名称、地址、等级及WGS84经纬度信息。例…

如何进行postgreSQL专家认证

进行 PostgreSQL 专家认证主要有信创 PostgreSQL 认证和中国 PostgreSQL 考试认证等方式&#xff0c;以下以信创 PostgreSQL 认证为例介绍具体步骤&#xff1a; 了解认证体系 信创 PostgreSQL 认证由工信部人才交流中心组织及颁发证书&#xff0c;包括以下三个级别&#xff1a;…

【前端】【webpack-dev-server】proxy跨域代理

参考&#xff1a;https://www.bilibili.com/video/BV1c5SnYZEnZ?spm_id_from333.788.videopod.episodes&vd_source65c8707649747fd67b232866b69a5ebd&p138

批量在 Word 的指定位置插入页,如插入封面、末尾插入页面

我们经常会碰到需要在 Word 文档中插入新的页面的需求&#xff0c;比如在 Word 文档末尾插入一个广告页、给 Word 文档插入一个说明封面&#xff0c;在 Word 文档的中间位置插入新的页面等等。相信这个操作对于大部分小伙伴来说都不难&#xff0c;难的是同时给多个 Word 文档插…

在Windows 11的WSL中安装Kali Linux

Kali Linux 是网络安全从业者和爱好者的首选工具集&#xff0c;但直接在物理机或虚拟机上运行可能占用较多资源。借助 Windows Subsystem for Linux (WSL)&#xff0c;我们可以在Windows 11中原生运行Kali Linux&#xff0c;轻量且高效。本教程将手把手教你如何在WSL2中安装并配…

Flow Size Prediction with Short Time Gaps

Flow Size Prediction with Short Time Gaps 网络流量预测新突破&#xff1a;微秒级短流预测的可行性分析 在当今数据中心和云计算环境中&#xff0c;网络流量的精准预测是优化资源分配、实现智能负载均衡的关键。传统流量和预测聚焦于长时间间隔&#xff08;如秒级或分钟级&…

pandas——to_datatime用法

Pandas中pd.to_datetime的用法及示例 pd.to_datetime 是 Pandas 库中用于将字符串、整数或列表转换为日期时间&#xff08;datetime&#xff09;对象的核心函数。它在处理时间序列数据时至关重要&#xff0c;能够灵活解析多种日期格式并统一为标准时间类型。以下是其核心用法及…

数学建模:MATLAB强化学习

一、强化学习简述 强化学习是一种通过与环境交互&#xff0c;学习状态到行为的映射关系&#xff0c;以获得最大积累期望回报的方法。包含环境&#xff0c;动作和奖励三部分&#xff0c;本质是智能体通过与环境的交互&#xff0c;使得其作出的动作所得到的决策得到的总的奖励达…

【leetcode hot 100 160】相交链表

解法一&#xff1a;&#xff08;哈希集合&#xff09;利用HashSet保存一个链表的值&#xff0c;循环另一个列表&#xff0c;在HashSet中寻找该值。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x…

19. 大数据-技术生态简介

文章目录 前言一、Hadoop介绍1. 简介2. Hadoop发展史3. Hadoop现状 二、Hadoop特性1. Hadoop国外应用2. Hadoop国内应用 三、Hadoop架构变迁1. 发行版本2. Hadoop架构变迁(1.0-2.0变迁)3. Hadoop架构变迁(3.0新版本)4. 综述 四、技术生态体系 前言 大数据&#xff08;Big Data…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例3: 行选择

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…