操作符详解1

        哈喽小伙伴们大家好,不知道三子棋扫雷大家实现的如何了呢,有没有自己独立的完成这样的小程序编程呢,相信大家一定都有所收获了。那么欢迎来到本期内容:操作符详解,其实早就想做这样一期内容啊,关于操作符,应该是属于基础中的基础了,大家在学习基础知识的时候一定要认真,基础的牢固程度决定高度,本来这期内容应该是第一期来讲,不过由于当初决定开博客也是属于临时起意,那时候在学习语句,也就从语句开始发了,不知不觉就写了11篇内容了,虽然从质量来说肯定称不上优秀,但是每一期内容基本都花费了10个小时左右的时间来写,及尽我所能把我当时阶段领悟的东西都写出来了,可能在大牛眼里它还很稚嫩,甚至再过一段时间我自己也会在我现在发表的文章里找到诸多缺陷,但是我依然会坚持写下去,这是我的成长日记。

        好了,废话不多说,开始本期内容

1操作符的定义

        简单来说,所谓操作符就是一种指令嘛,相对于一串指令,操作符比较短小精悍,只需要给操作符操作数,就能根据操作符的含义对操作数进行操作。操作符呢我也没找到具体的正式化的定义,大家理解就好。

2操作符分类

        1.算术操作符2.移位操作符3.位操作符4.赋值操作符5.单目操作符6.关系操作符7.逻辑操作符8.条件操作符9.逗号表达式10.下标引用、函数调用和结构成员

3算术操作符

        3.1算术操作符包括+ - * / %  前四个相信大家都非常熟悉,就是我们的加减乘除嘛。就不多介绍了,算术操作符就是用来“算数”的嘛,加减乘除跟我们所日常用到的并没有区别,这里简单说一下这个除法/和取模%,两个本质上都是除法,只不过除法算的是商,取模取的是余数。例如下代码:

         我们大家算5除以2很容易就能得到2.5,但是由于我们创建的变量都是整形int,5除以2的结果计算机的得到的就是商2余1。“/”得到商,“%”得到余数。如果我们想让结果是2.5怎么办呢?有的小伙伴可能就想到了,只要把接收变量改为浮点型不就就行了吗,我们来看图说话:

         我们发现结果还是2。这是因为5和2是常量,我们虽然没有定义数据类型,但是他们有计算机给定义的类型,计算机把他们定义为整形,两个整形的计算结果还是整形,虽然我们用了浮点型变量去接收,但是由于结果就是2,所以接受到的就只能是2.000000。如果想结果为2.5其实也很简单,我们只需要让操作符“/”的两个操作数至少有一个浮点型,那么计算机计算时就会把结果定义为浮点型,如图:

         这个时候,计算的结果就为浮点型了,如果我们用整形去接收,就会有警告,提示我们结果从double变为int会丢失数据,也就是小数点后面的,结果为2:

         而“%”的两个操作数必须都为整形,否则程序报错:

 4移位操作符

        4.1移位操作符就像我们中文的书名号,就是两个连续的大于小于号“《”表示左移操作符,“》”表示右移操作符。移位操作符移动的是二进制位,例如16,我们把它写作二进制数就是00010000那么如果我们用右移操作符把16右移一位,结果是多少呢?应该就是00001000,也就是8,如图:

        由于C语言是不能直接printf输出二进制结果的(可以输出八进制“%o”,十进制“%d”,十六进制“%x”),这里为了让大家更直观的看到结果,用了一个库函数_itoa。这个函数可以把参数转化为任意进制(2到36),得到的结果是二进制的字符串。这个库函数使用时需要引用:“#include <stdlib.h> ”,该函数有3个参数,第一个为操作数,第二个是存储得到的字符串结果的容器,第三个是把数字转化为几进制。例如上面代码中的 _itoa(a, arr, 2); 这一句,就是把变量a中的数字的二进制字符串存储在数组arr中。

        4.2算术移位和逻辑移位。这是移位的两种形式,以右移为例,算术右移是右边多余出来的舍弃,左边补符号位。或者小伙伴的可以理解为符号位不变,剩下的右移一位,空出来的位置补0。而逻辑右移就是多余的舍弃,左边补零。左移也是一样,算术左移符号位不变,剩下的左边移出来的舍弃,空位置补零,逻辑左移是左边舍弃,右边补零。在我们的Vs编译器中,移位操作符执行的都是算术移位。例如图:

         相信很多小伙伴不能理解为什么-1的二进制是这么长一串1哈,不要着急,正好给大家讲一下三码。首先 整形int占4字节,一字节8bit位,也就是int在内存中占32bit位,bit位之前在数组篇给大家解释过内存,不懂得可以看看,作为常识了解一下哦。bit就是二进制的一种表示方式,每一个bit位有0和1两种状态。事实上,计算机内存的所有东西归根结底都是bit形式的二进制数。而二进制有三种编码,也就是原码,反码,补码。原码就是我们所认识的二进制,比如-1的32位原码就是10000000000000000000000000000001。第一位是符号位,0表示正数,1表示复数。最后一位是1的2进制表示,中间补0。比如5的二进制是101,那么-5的32位原码就是10000000000000000000000000000101。而反码则分情况,正数得得反码就是原码,负数的反码就是按位取反,0变1,1变0。补码就比较复杂一点,正数的补码依旧是它的原码,也就是正数的三码是相同的。负数的补码是符号位不变,剩下的按位取反加1(反码加1)。还是的用-1举例,原码符号位不变,剩下的先取反为11111111111111111111111111111110,再加1就是11111111111111111111111111111111。到这里相信小伙伴们已经猜到了,计算机内存中存储的都是补码,因为_itoa函数是吧内存中的二进制变成字符串形式存储进容器,所以我们看到的-1的二进制就是32个1。

        4.3,“大聪明条款”:一般人可能不会去这么想哈,大聪明想得多,比如我(狗头)。那么大聪明可能会想到啥呢,就是移位操作符操作数2不能为负数,即向右移动一位不能写作向左移动-1位啊。当然善于思考真的是一个非常好的习惯,能想到这一点的其实是很好的啊,大聪明不是贬义词,少看点西虹市首付哈小伙伴们。

5位操作符

        5.1好啦,开个小玩笑,我们继续讲位操作符。位操作符有三个,它们的操作数必须是整数哦,包括上面的移位操作符。3个位操作符分别为&,|,^。

        5.2按位与“&”:这里的位还是我们的二进制数(当然有机灵的小伙伴可能就发现了,哎呦这个按位与怎么跟取地址符号这么像呢?当然不是大家眼花,实际上它俩就是同一个符号,只不过按位与是双目操作符,取地址是单目操作符,几目就是几个操作数)。例如下代码:

 注意:这里的计算时都应该使用的32位补码,因为是正数,所以补原相同,负数记得转化为补码计算完了结果还是补码,想知道具体是几还要变回原码(补码-1之后除符号位后按位取反)。

        5.3按位或与按位与基本相同,只是计算规则不同,例如下代码:

         5.4按位异或“^”,都是大同小异,例如下代码:

 6作用

        6.1操作符呢比较多,这期就先给大家讲解算术操作符,移位操作符和位操作符。那么他们有什么用呢?其实这个并不好说,如果非要说的话,我认为他们的用处就是他们本身具有的效果,类似于砖头,他的作用就是他的特点,它的效果,比如硬,方方正正,可以堆叠,至于你是用砖头拍人还是用来盖房子,那就取决于人了。我们的操作符就是这样,用法千变万化,没有明确的作用,但是很重要。下面简单说两种应用。

        6.2算术操作符就不多说了,算数嘛。那么这个移位操作符有什么用呢?不知道小伙伴们发现了没有,16右移一位变成了8,再移一位变成4,也就是缩小为原来的二分之一。同样的左移就变大为原来的2倍嘛。原因也是简单,我举个例子大家就很容易理解了。比如一个10进制数1000右移一位,变成多少了呢?相信“傻子”都知道是100。那么一千到一百,变成了10分之一,因为是10进制嘛,所以二进制相信大家就很容易理解了。那么一位操作符的应用就来了,比如不用加减乘除把一个数变为原来的8倍,我们就可以左移三位嘛。

        6.3位操作符的应用:与和或与我们日常数学学的差不多,说说异或,他有什么用呢?比如现在有这样一个题:在不创建临时变量的情况下,交换两个变量的值。我们就可以用异或来做。例如下代码:

         6.4相信很多小伙伴就懵了啊,这很正常,我也懵,这个问题很难去解释明白,就是我到现在其实也说不明白到底为啥,如果非要给出一个解释,那么我是这样理解的:异或两个值相当于两个原码组成一个加密的密码,当这个异或得到的密码和两个原码的任何一个进行异或操作,就会解码得到另一个原码。

7好啦,本期内容我们就到这里啦,如果觉得这篇文章对你有帮助欢迎点赞转发评论区交流,关注小白阿g,让小白不再白学,亲爱的小伙伴们下期见。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值