在代码的虚实架构里:操作符与数据处理的灵魂和鸣(上)

在这里插入图片描述

大家好啊,我是小象٩(๑òωó๑)۶
我的博客:Xiao Xiangζั͡ޓއއ

很高兴见到大家,希望能够和大家一起交流学习,共同进步
在这里插入图片描述
> 这一节我们来学习操作符的知识,学习操作符的分类,二进制和进制转换,包括二进制转十进制,十进制转二进制,二进制转八进制,八进制转十六进制,原码、反码、补码, 移位操作符,包括左移操作符,右移操作符,最后学习位操作符,包括按位与,按位或,按位异或,按位取反…

操作符

在C语言中,操作符是 用于执行各种运算和操作的符号。这些操作符可以是算术操作符、关系(比较)操作符、逻辑操作符、位操作符、赋值操作符、递增/递减操作符、条件操作符、逗号操作符 等。
这些操作符是C语言编程的基础,理解它们的用法和优先级对于编写正确和高效的代码至关重要。

一、操作符的分类

• 算术操作符: + 、- 、* 、/ 、%
• 移位操作符: << >> • 位操作符: & | ^
• 赋值操作符 : = 、+= 、-= 、 = 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
• 单目操作符: !、++、–、&、
、+、-、~ 、sizeof、(类型)
• 关系操作符: > 、>= 、< 、<= 、 == 、 !=
• 逻辑操作符: && 、||
• 条件操作符:? : (目前学的唯一三目操作符
• 逗号表达式: ,
• 下标引用: [ ]
• 函数调用:( )
• 结构成员访问: . 、->

上述的操作符,我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作符,今天继续介绍一部分,操作符中有一些操作符和二进制有关系,我们先铺垫⼀下二进制的和进制转换的知识。

二、二进制和进制转换

在C语言中,进制是一种非常重要的概念,它涉及到数据的表示和存储方式。
进制,也称为数制,是数学中用于表示数字的一种系统或方法。在数字系统中,每个数字的意义和权重都由其所处的位置来决定。常见的进制有二进制、八进制、十进制和十六进制。
那这些进制是什么意思呢?
其实2进制、8进制、10进制、16进制是数值的不同表示形式而已。

比如:数值15的各种进制的表示形式:

152进制:1111
158进制:17
1510进制:15
1516进制:F

//16进制的数值之前写:0x
//8进制的数值之前写:0

我们重点介绍一下二进制:
二进制(Binary)是一种只有两个数字(0和1)的数制系统。 在计算机科学中,二进制被广泛用于表示和处理数据计算机内部的所有信息,包括数字、字符、图像等,最终都被转换成二进制形式进行存储和运算。
首先我们还是得从10进制讲起,其实10进制是我们生活中经常使用的,我们已经形成了很多尝试:
• 10进制中满10进1
• 10进制的数字每一位都是0~9的数字组成
其实二进制也是一样的
• 2进制中满2进1
• 2进制的数字每一位都是0~1的数字组成
那么 1101 就是二进制的数字了。
注意:二进制也可以是0b开头

二进制转十进制

其实10进制的123表示的值是一百二十三,为什么是这个值呢?其实10进制的每一位是有权重的,10进制的数字从右向左是个位、十位、百位…,分别每一位的权重是 10 , 10 , 10 …

在这里插入图片描述
2进制和10进制是类似的,只不过2进制的每一位的权重,从右向左是: 2 , 2 , 2 … 0 1 2
如果是2进制的1101,该怎么理解呢?
在这里插入图片描述
注意:求值的时候是加法,不是乘法

十进制转二进制

在这里插入图片描述

二进制转八进制

八进制数由0~7这八个数字组成。
在C语言中,八进制数必须以数字0开头,后跟一个或多个0~7之间的数字。例如,015表示八进制数15,0177777表示八进制数177777。

8进制的数字每一位是0-7的,0~7的数字,各自写成2进制,最多有3个2进制位就足够了
比如7的二进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算一个8进制位,剩余不够3个2进制位的直接换算
如:2进制的 01101011,换成8进制:0153,0开头的数字,会被当做8进制
二进制转八进制后前面要记得补0
在这里插入图片描述
八进制转化成二进制的过程与这个相反

八进制转化十六进制

十六进制数由数字0-9和字母A-F或a~f(不区分大小写)组成。

在C语言中,十六进制数必须以0x或0X(不区分大小写)开头。例如,0X2A表示十六进制数2A,0xffff表示十六进制数FFFF。

16进制的数字每一位是0-9, a-f 的,a-f代表的是10-16,0-9, a-f的数字,各自写成2进制,最多有4个2进制位就足够了,比如 f 的二进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进
制位会换算⼀个16进制位,剩余不够4个二进制位的直接换算
如:2进制的01101011,换成16进制:0x6b,16进制表示的时候前面加0x
在这里插入图片描述

三、原码、反码、补码

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

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

符号位都是用0表示“正”,用1表示“负”。

原码(True Form):原码是计算机中对数字的二进制定点表示方法,最高位为符号位,0表示正数,1表示负数,非符号位表示该数字的绝对值的二进制形式。原码表示法简单直观,但无法直接进行减法运算,因为计算机中只有加法器而没有减法器。简单来说,直接将数值按照正负数的形式翻译成二进制得到的就是原码。
反码(Complemental Code):反码通常是用来由原码求补码或者由补码求原码的过渡码。反码的出现是为了解决原码无法直接进行减法运算的问题,但反码表示法仍然存在缺陷,如0有两个对应的反码(+0和-0)。简单来说,将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码(Ones-Complement Code 或 Two’s Complement Code):补码是计算机中用来表示负数的一种巧妙方法,同时也是计算机内部存储和运算中实际使用的编码方式。补码表示法解决了反码表示法中0有两个对应值的问题,使得0在补码中只有唯一的表示(全0)。
补码表示法还简化了溢出处理当运算结果超出表示范围时,会自动循环回到表示范围的另一端。
在C语言中,整数类型(如int、short、long等)的变量自动以补码形式存储和运算。简单来说,反码+1就得到补码

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

对于整形来说:数据存放内存中其实存放的是补码。

为什么呢?
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

四、移位操作符

在C语言中,移位操作符是对整数的二进制表示进行左移或右移操作的运算符。这些操作符在底层数据处理、位字段操作以及性能优化中非常有用。C语言中的移位操作符主要包括左移操作符(<<)右移操作符(>>)
<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数

左移操作符

当左移操作导致结果超出变量的存储范围时,会发生溢出,通常会导致未定义行为。
移位规则:左边抛弃、

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值