ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言移位操作符和位操作符

2022-01-23 22:02:38  阅读:172  来源: 互联网

标签:右移 int 补码 C语言 操作符 原码 按位 移位


移位操作符

在C语言中 << 成为为左移操作符,>>称为右移操作符,例下面一串代码

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

b表示的是将a也就是数字2进行左移一位,这个左移操作符代表着将a也就是2 的二进制位向左移动一位

如图所示 在进行左移的时候右边要进行补零,

当然上面这个是针对于正整数而言的,要是一个数为负数的时候,这个时候我们应该了解到在计算机中,所有的数字都是以二进制的形式存放的,但存放的方式为该数字的补码,我们通常转化的数字的二进制位是其的源码,当然由于计算机中储存的是补码,因此我们之间还需要通过一定的转换方式,

当我们写出一个数字的源码时候,所有的正整数的原码,反码,补码都是相同的,因此我们针对于正整数一般不济与讨论

对于负数,最高位非零代表的是负数,

 如这个数字就代表着 -5,我们在原码转换为反码和补码时遵循这样的规律:反码是原码的符号位不变,其它位按位取反。反码+1则为补码,因此我么可以得出-5的原码反码和补码为

那么这下回到我们的移位操作符中来,如下

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

我们将-5向左移动一位则会得到什么样的结果呢?通过编译器的编译我们将会得到b=-10

因为当我么将-5的补码向左移动一位右边补零则是11111111111111111111111111110110将其逆推则会得到原码为10000000000000000000000000001010因此将-5左移一位则会得到-10

接下来我么来讨论右移,在右移时候我们有了左移操作符所讲的因此可以类似推出来>>操作符就是将数字的补码进行右移,但是左边会少了几位,这个时候左边少的这个应该是什么呢?

在右移中我们通常有两种右移方法,一种为算数右移:右边的丢弃,左边补原符号位。另外一种为逻辑右移:右边丢弃,左边补零。至于我们的右移是na'种方法那是要具体看我们的编译器是怎样进行移动的。

位操作符

在位操作符中一般有三种    &   |   ^

& 按(2进制)位与

|  按(2进制)位或

^  按(2进制)位异或

#include<stdio.h>
int main()
{
    int a = 5;
    int b = 3;
    int c = a & b;
    return 0;
}

此时c就等于a按位与b

按位与是同时为1才取1,反之则取0;则有

 a & b = 1

同时也有  |  按位或:同时为0才取0,有1则按位1

                ^  按位异或:相同则为0;相异则为1

标签:右移,int,补码,C语言,操作符,原码,按位,移位
来源: https://blog.csdn.net/liar________/article/details/122657293

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有