1.移位操作符和位操作符

作者: 尹凯跃_8期强化班 | 来源:发表于2022-03-19 19:23 被阅读0次

1.移位操作符

移位操作符有两种:一种是左移操作符(<<),另一种是右移操作符(>>)。这两种操作符都是对整数在存储在电脑中的二进制位进行操作(注意:移位操作符的操作数必须是整数)。那么这两种操作符有什么区别和联系呢?让我们接着往下看。

1.1左移操作符(<<)

接下来我们借助一个整数来更好的理解和应用左移操作符:

在计算机内存中储存的是二进制形式的补码,而正数的源码,反码,补码相同,所以正数5的补码如下:

补码我们已经写出,那么移位操作符到底是怎么进行移位呢?我们接着往下看。

左移操作符移位原则:左边抛弃,右边补0.

现在你一定会想:移位之后a的值变为了多少?左移操作符是不是有乘2的效果?

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

我们来看一下运行结果:

左移操作符其实可以认为是由*2的效果的

接下来我们通过一道例题来更好的理解左移操作符的*2效果(2的n次方的计算)

原题链接:2的n次方计算_牛客题霸_牛客网

题目描述:不使用累加法的基础上,使用左移操作符(<<) 完成2的n次方的计算。

代码实现

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

1.2右移操作符(>>)

右移操作符和左移操作符是相似的,但是右移操作符最大的难点就是在右边抛弃之后:1.左边补符号位(算术右移)2.左边补0(逻辑右移)究竟是哪一种右移方式取决于程序的运行环境,也就是取决于编译器。在VS2019中采用的是算术右移。

注意:移位操作符,不要移动负数位,这是标准未定义的。

对比一下左移操作符*2效果,右移操作符应该具有/2的效果。

2.位操作符

位操作符,顾名思义就是对一个数的二进制位进行操作,两个操作数,且操作数必须是整数。具体分为三种:& (按位与)    |(按位或)    ^(按位异或)

2.1&按位与

两个数的二进制相同位只有同为1时结果为1,否则为0.

2.2 |(按位或)

两个数的相同二进制位同为0时结果为0,否则为1.

2.3 ^(按位异或)

两个数相同二进制位相异时为1,相同是为0.a^a == 0;

相关文章

  • java二进制表示形式与移位操作符

    1.java二进制表示形式 2.移位操作符1.左移位操作符(<<)2.“有符号”右移位操作符(>>)3.“无符号”...

  • c语言第七讲 操作符和表达式

    目标 操作符介绍 表达式求值 操作符号 操作符的分类 算术操作符 移位操作符 位操作符 赋值操作符 单目运算符 关...

  • 第5章,操作符和表达式

    位操作符 1、&(AND) |(OR) ^(XOR) 2、移位操作 条件操作符 类似这样的,b=a>5?3:...

  • JavaScript高程读书笔记(2)

    五、操作符 算数操作符、位操作符、关系操作符、 相等操作符 一元操作符++和--:注意a+++,- 位操作符按位非...

  • 一文彻底弄懂Java的移位操作符

    前言 对于移位操作符,很多人既感到熟悉,又感到陌生。熟悉是因为移位操作符是最基本的操作符之一,几乎每种编程语言都包...

  • 移位操作符

    java中有三种移位运算符 <<:左移位操作符,能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0...

  • 移位操作符

    1、介绍 移位操作符只可处理整数类型。 << : 左移位操作符(i<<2),顾名思义,即在将整个字节向左移动...

  • Shift Operator

    按位操作符 逻辑移位均补0算术移位左移补0右移正数补1 负数补0看左数第一位

  • Swift - Advanced Operators

    按位 和 位移位操作符 与 C 和 OC 的类似 溢出行为被捕获并报出一个错误 溢出操作符一般始于 &,第二个字符...

  • 5. 从头学前端之操作符

    操作符包括算术操作符(如加号和减号)、位操作符、关系操作符和相等操作符。 一元操作符 只能操作一个值的操作符叫做一...

网友评论

    本文标题:1.移位操作符和位操作符

    本文链接:https://www.haomeiwen.com/subject/wbjadrtx.html