【C操作符详解】之 移位操作符

简介: 【C操作符详解】之 移位操作符

这篇文章详细讲解一下C语言中的移位操作符。

一起来学习吧!!!


首先,给大家说明一点,移位操作符的操作数只能是整数,移位移动的是二进制位(当然整数在内存中存的是补码)。

🌁 1.左移操作符(<<)

首先我们来看左移操作符,<<:


左移操作符的移位规则是:


左边抛弃、右边补0


我们来举个例子:

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

大家可以按照上面的移动规则自己算一下,看看结果是什么。

好,那现在我们一起来分析一下:

6094872201bc45d48ffdc031cc8ae31a.png

那结果是不是20 呢?我们来看一下:

e7e0cc5864594bb5ac8990bdb10d2127.png

另外提醒一下,对a进行移位之后,a在不被赋值的情况下(a=a<<1),a自身的值不会发生变化。

我们可以打印一下看看:

96ef0feb52d74210b1be2613e8ae7025.png

好,刚才是对正数进行移位,我们再来移一个负数试试:

int main()
{
  int a = -2;
  int b = a << 1;
  printf("%d", b);
  return 0;
}

一起分析一下:

4cf8f183d4e9403aa2a28011b8e9eb3a.png

是-4吗?13c8d829fe4945b7af2e264b99945835.png

做了两道题之后,我们好像可以发现一个规律:

对整数左移一位,相当与乘了一个2:

10左移一位结果是20;

-2左移一位结果是-4;

那左移操作符我们学会了,接下来我们来看右移操作符。

⛄️ 2.右移操作符(>>)

对于右移操作符,它的移位规则分为两种:

(1)算术右移

右边丢弃,左边补原符号位

上例子:

int main()
{
  int a = -1;
  int b = a >> 1;
  printf("%d", b);
  return 0;
}

在这里给大家提一下,在我使用的vs2022这个编译器上采用的就是算术右移(大部分编译器都是算术右移)。

那我们按照算术右移来分析一下结果是什么:

8f42f92c325c419881b106622bbeb416.png

看看vs2022的结果:

59e2b5253a434693be2fb100df5008e0.png

这是算术右移,接着我们看逻辑右移。

(2)逻辑右移

右边丢弃,左边补0

那还是这个代码:

int main()
{
  int a = -1;
  int b = a >> 1;
  printf("%d", b);
  return 0;
}

现在我们用逻辑右移来分析一下:

5253f17591264df7ba4d6dc40281d156.png

我们看看转换为10进制是几:

e36f46081dc54430ad92b76325a3b0f1.png

因为我们的编译器是算术右移,所以没法验证,大家知道就行了

最后,再给大家提醒一点:

b0f6777ca59d4ffcb0a02a155e2e8d24.png

警告⚠ :

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

比如:

cec7df3dc7e147a8b7d7d3ee8bba150a.png

以上就是移位操作符的全部内容,欢迎大家指正!!!

d275c9f6d36f40278faa99998a5e548d.png


目录
相关文章
|
6月前
|
存储 C语言
【C语言】位与移位操作符详解
【C语言】位与移位操作符详解
【C语言】位与移位操作符详解
|
6月前
|
存储 算法 编译器
【c 语言 】移位操作符详解
【c 语言 】移位操作符详解
267 0
|
存储 C语言
C语言操作符[算数操作符,赋值操作符,单目操作符,移位操作符]
C语言操作符[算数操作符,赋值操作符,单目操作符,移位操作符]
|
2月前
|
前端开发 JavaScript
前端基础(五)_运算符(算术运算符、赋值运算符、比较运算符、逻辑运算符、三目运算符、运算符优先级和结合性、数据类型的隐式转换)
本文介绍了JavaScript中的算术运算符、赋值运算符、比较运算符、逻辑运算符、三目运算符、运算符优先级和结合性以及数据类型的隐式转换。
32 3
|
5月前
|
编译器 C语言
【C语言】:中移位操作符,位操作符详运算规则详解
【C语言】:中移位操作符,位操作符详运算规则详解
41 1
|
6月前
|
C语言
算术操作符、赋值操作符、复合赋值符
这篇文档介绍了算术和赋值操作符。算术操作符包括加&quot;+&quot;、减&quot;-&quot;、乘&quot;×&quot;、除&quot;/&quot;和求余&quot;%”,其中求余只适用于整数,结果正负由第一个运算数决定。赋值操作符有&quot;=&quot;用于给变量赋值,而复合赋值符如&quot;+=&quot;、&quot;-=&quot;等则结合了运算和赋值功能,简化代码编写。
35 1
|
6月前
|
C语言
【C语言】位操作符与移位操作符练习
【C语言】位操作符与移位操作符练习
【C语言】位操作符与移位操作符练习
|
6月前
|
C++
C/C++中三目运算符(条件运算符)的使用详解
C/C++中三目运算符(条件运算符)的使用详解
|
存储 编译器 C语言
【C语言初阶】带你轻松玩转所有常用操作符(1) ——算数操作符,移位操作符,位操作符
【C语言初阶】带你轻松玩转所有常用操作符(1) ——算数操作符,移位操作符,位操作符
89 0
|
6月前
|
存储 C语言
C learning_12 操作符前篇(算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符)
C learning_12 操作符前篇(算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符)