资讯专栏INFORMATION COLUMN

C语言之移位操作符、位操作符详解

NeverSayNever / 1170人阅读

摘要:目录移位操作符移位操作符位操作符位操作符移位操作符分为左移操作符和右移操作符。左移操作符移位规则左边抛弃,右边补。算数移位和逻辑移位。

目录

1、移位操作符

2、位操作符


1、移位操作符

分为左移操作符(>>)和右移操作符(<<)。

左移操作符:

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

什么意思呢,现在就让我来仔细讲解一番。

比如我们定义一个整型变量a,给它赋初值5.如int a=5;然后将a左移,即a<<2,得到的结果又是多少呢?在讲之前,我们首先要了解到整型5在内存中是怎样存储的,不太清楚的友友们就请看我之前一篇博客整数的3种表达形式及在内存中的存储啦,里面有详细讲解。整型5是以补码的形式来存储的。而将5左移2位就是将存储在内存中的二进制位向左移动2位并将此2位抛弃,右边用0补齐。最后得到的就是5<<2后的结果啦,可以用一下图来简单描述一下~

 根据上图可知a<<2后得到的结果就是20。

右移操作符:

首先右移运算分为两种。算数移位和逻辑移位。

算数移位规则:左边用该值的符号位填充,右边丢弃。

逻辑移位规则:左边用0补充,右边丢弃。

具体什么意思呢,我们还是来看看几个例子,如将5右移移位,即5>>1,得到的是多少呢?

如果是算数移位的话,就是将5存储在内存中的二进制位向右移动1位并将这一位抛弃,左边用该值存储的二进制位的符号位补齐。如下图:

所以5>>1得到的结果就是2。那逻辑移位呢,逻辑移位就是左边用0,补充,右边抛弃。对正数而言,其符号位就是0,所以算数移位与逻辑移位得到的结果相同,逻辑移位也可以用上图来表示啦,得到的结果也是2。

若将-5右移一位呢,得到的结果又是什么呢。我们先来看看算数移位,就不多赘述了,请看下图:

 

所以-5>>1算数移位得到的就是-3。

同理,我们来看看-5>>1逻辑移位的得到的是什么吧~

 

因为最高位是0,所以最后的结果就是3啦~。但是一般条件下都是用的算数移位哈。

2、位操作符

&     按位(二进制位)与

|      按位(二进制位)或

^     按位(二进制位)异或

我们直接来看这段代码,大家可以先猜一下最后输出的是哪三个数呢:

int main(){	int a = 3;	int b = -5;	printf("%d %d %d", a & b, a | b, a ^ b);	return 0;}

我们先来分析一下:按位与就是将两个数存储的二进制位作比较,两者均为1才为1,否则为0。因此a&b用图来分析就是:

因此a&b的结果就为3了。

按位或就是 将两个数存储的二进制位作比较,两者中有一个为1就为1,否则为0。因此a|b用图来分析就是:

 

所以a|b的值就是-5了。

按位异或就是 两个数存储的二进制位作比较,两者相同为0,相异为1,因此a^b用图来分析就是:

 所以a^b的结果就是-8啦。

最后我们让程序来运行一下:

 是和分析的一样吧~~~

到这里就结束啦,希望友友们能给个赞哈~~~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124772.html

相关文章

  • C语言基础作符详解

    摘要:语言基础之操作符详解操作符的分类算术操作符移位操作符位操作符逻辑操作符逗号表达式表达式求值隐式类型转换算术转换操作符的属性今天就带各位大佬来了解一波语言的操作符。 ...

    snowell 评论0 收藏0
  • C语言作符多图详解】——“讲述你所未知的作符细节”

    摘要:今天小玄为大家带来语言的操作符相关的讲解,希望大家能通过这篇文章对相关操作符有更加深入的理解。操作符的两个操作数必须为整数。操作符的优先级操作符的结合性是否控制求值顺序。两个相邻的操作符先执行哪个取决于他们的优先级。         今天小玄为大家带来C语言的操作符相关的讲解,希望大家能通过...

    iliyaku 评论0 收藏0
  • 这些c语言作符你确定你掌握了?如果不保准就来看看这篇文章吧

    摘要:毋庸置疑,运算符号操作符就是进行语言的一些运算的,这些运算符虽然你在学语言的时候很不起眼,而在有些题目上还不让用这些操作符来做题,但是,当你用到他们的时候,他们会给你意想不到的帮助。 目录 操作符详解 什么是操作符呢? 操作符的分类 操作符的优先级  1、优先级1级 2、优先级2级 3、...

    Carson 评论0 收藏0
  • 再识C语言(五)

    摘要:注不要移动负数位标准未定义行为这种行为属于标准未定义行为语言中并没有规定移动负数位。按进制位与规则两个二进制数,有则为,全则为。为假的时候,打印语言中表示假,非表示真无论是正数还是负数。 C语言操作符详解 目录 一、算术操作符 二、移位操作符 三、位操作符 四、赋值操作符 五、单目操作符 六...

    BigTomato 评论0 收藏0
  • 【STM32】标准库与HAL库对照学习教程八--串口通信详解

    摘要:异步通信与同步通信异步通信异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。同步通信同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。配置串口设置为异步通信基础参数波特率为。 ...

    yck 评论0 收藏0

发表评论

0条评论

NeverSayNever

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<