精华内容
下载资源
问答
  • C语言里的左移和右移运算C语言里的左移和右移运算C语言里的左移和右移运算C语言里的左移和右移运算
  • // 把 i 里的值左移 2位 也就是说 ,1的 2进制是 000.0001( 这里 1前面 0的个数 int 的位数有关 ,32位机器 ,gcc 里有 31个0,左移 2位之后变成 000.0100,也就是 10进制的 4,所以说左移 1位相当于乘以 2,那
  • C语言中左移右移运算规则

    万次阅读 2018-05-03 15:38:15
    //把i里面的值左移2位121的2进制是 000…0001 (这里前面0的个数int的位数有关,32位机器,gcc里有31个0),左移2位之后变成: 000…0100, 也就是10进制的4,所以说左移1位相对于乘以2的n...

    https://blog.csdn.net/u012745229/article/details/51405332

    左移

        int i=1;
        i=i<<2;//把i里面的值左移2位
    • 1
    • 2

    1的2进制是 
    000…0001 
    (这里前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成: 
    000…0100, 
    也就是10进制的4,所以说左移1位相对于乘以2的n次方(有符号数不完成适用,因为左移有可能导致变化,下面解析原因)

    //需要注意的一个问题是int类型最左端的符号位和移动出去的情况,我们知道,int是有符号的整形数,左端的1位是符号为,即0为正1为负,那么用移位的时候就会出现溢出,如:
    int i=0x40000000;//16进制的40000000,为2进制的01000000...0000
    i=i<<1;
    //那么,i在移动1位之后就会变成0x80000000,也就是2进制的100000...0000,符号位被置1,起位全是0,变成了int类型所能表达的最小值,32为的int这个值是-2147483648,溢出,如果在接着把i左移1位会出现什么情况呢?在c语言都采用了丢弃最高位的处理方法,丢弃了1之后,i的值变成了0
    • 1
    • 2
    • 3
    • 4

    左移里面一个比较特殊的情况是当左移动的位数超过该数值类型的最大位数时,编译器会用左移的位数区模类型的最大位数,如

    int i=1,j=0x80000000;//设int32i=i<<33;//33%32=1 左移动1位,i变成2
    j=j<<33;//33%32=1 左移动1位,j变成0,最高为被丢弃
    • 1
    • 2
    • 3

    总之左移就是: 丢弃最高位,0补最低位

    右移

    右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如

    int i = 0x80000000;
    i = i >> 1; //i的值不会变成0x40000000,而会变成0xc0000000
    • 1
    • 2
    • 就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.
    • 总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多.
    -5>>3=-1
    1111 1111 1111 1111 1111 1111 1111 1011
    1111 1111 1111 1111 1111 1111 1111 1111
    其结果与 Math.floor((double)-5/(2*2*2)) 完全相同。
    
    -5<<3=-40
    1111 1111 1111 1111 1111 1111 1111 1011
    1111 1111 1111 1111 1111 1111 1101 1000 
    其结果与 -5*2*2*2 完全相同。
    
    5>>3=0
    0000 0000 0000 0000 0000 0000 0000 0101
    0000 0000 0000 0000 0000 0000 0000 0000
    其结果与 5/(2*2*2) 完全相同。
    
    5<<3=40
    0000 0000 0000 0000 0000 0000 0000 0101
    0000 0000 0000 0000 0000 0000 0010 1000
    其结果与 5*2*2*2 完全相同。
    
    -5>>>3=536870911 
    1111 1111 1111 1111 1111 1111 1111 1011
    0001 1111 1111 1111 1111 1111 1111 1111
    
    无论正数、负数,它们的右移、左移、无符号右移 32 位都是其本身,比如 -5<<32=-5、-5>>32=-5、-5>>>32=-5。
    一个有趣的现象是,把 1 左移 31 位再右移 31 位,其结果为 -10000 0000 0000 0000 0000 0000 0000 0001
    1000 0000 0000 0000 0000 0000 0000 0000
    1111 1111 1111 1111 1111 1111 1111 1111
    
    对于10进制的数字,左移一位就是在末尾加上一个0,数值变大10倍。
    同理,对于二进制数字,左移一位是在末尾加上一个0,数值变大2被。
    所以 x << 3x就变大 2^3 倍,就是 8*x
    右移同理 
    
    一般情况下你要乘或者是除以数字是2的次方的话都可以用的
    执行速度快
    展开全文
  • 左移和右移的算法

    万次阅读 2020-12-01 14:16:30
    1.运算规则: 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的 空位补零。 2.语法格式: 需要移位的数字 << 移位的次数 例如: 3 << 2,则是将数字3左移2位 计算过程: 3 <<...

    <<(左移)
    1.运算规则: 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的

    空位补零。

    2.语法格式: 需要移位的数字 << 移位的次数 例如: 3 << 2,则是将数字3左移2位 计算过程: 3 << 2 首先把3转换为二进制数字0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 1100,则转换为十进制是12。

    |0000 0011|
    

    00 |00 0011xx|

     |00 001100|
    

    注:红色为舍弃部分,绿色为补齐部分

    3.数学意义: 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次,左移n位就相当于乘以2的n次方。

    3X2^2=3X4=12

    (带符号右移)
    1.运算规则: 按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的

    空位补符号位,即正数补零,负数补1。

    2.语法格式: 需要移位的数字 >> 移位的次数 例如11 >> 2,则是将数字11右移2位 计算过程: 11的二进制形式为:0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。负数补1,则得到的最终结果是0000 0010。转换为十进制是2。

    |0000 1011|

    |xx00 0010|11

    |0000 0010|

    注:红色为舍弃部分,绿色为补齐部分

    3.数学意义: 右移一位相当于除2,右移n位相当于除以2的n次方。这里是取商哈,余数就不要了。

    11/(2^2)=2,若为小数,取整即可

    展开全文
  • 主要介绍了c语言左移和右移的示例详解,移位操作符的两个操作数必须是整型的。整个移位表达式的值的类型也是整型的,而且,左移位操作符与右移位操作符的运算并不对称。
  • // 把 i 里的值左移 2位 也就是说 ,1的2进制是 000.0001( 这里 1前面 0的个数 int 的位数有关 ,32位机器 ,gcc 里有 31个 0, 左移 2位之后变成 000.0100,也就是 10进制的 4,所以说左移 1位相当于乘以 2,
  • c++中的左移右移运算

    千次阅读 2018-12-12 14:33:46
     c++中,整数分有符号数无符号数两种,对于这两种数做左移右移运算,稍有区别: 1、如果是无符号数,不管是左移还是右移都是“逻辑移位”  例如,分别对无符号数 179 做左移、右移操作的结果 2、...

    转载地址:https://blog.csdn.net/cx_12586/article/details/72961602

    今天在看X264的源代码时,发现里面大量应用了">>"运算符,看书的时候注意过这个细节,不过在工作中一直没有用到,也没记住。重新查了K&R,里面说无符号数的移位总是用0填充,而对于有符号数,"<<"是用0填充的,“>>”则与机器的具体实现有关。如果用0填充,那么这种填充方式称为“logical shift”,若用符号位填充,则称为“arithmetic shift”。在IBM PC汇编里面,好像就有两个汇编指令对应这两个操作。看了下面的这篇文章,作者应该认为X86里基本都是arithmetic shift,结合我手边的代码,我也倾向于这种观点。

     

     

    移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。

    逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。

    算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。

     

      c++中,整数分有符号数和无符号数两种,对于这两种数做左移、右移运算,稍有区别:

    1、如果是无符号数,不管是左移还是右移都是“逻辑移位” 

    例如,分别对无符号数 179 做左移、右移操作的结果

    2、如果是有符号数,

    2a,如果是做左移运算,那么做的是“逻辑移位”,同 1中无符号数的左移。

    2b,如果是做右移运算,那么做的是“算术移位”。

    对于当前的大多数c/c++编译器来说,都是按照上面所讲实现的。

    展开全文
  • js左移右移快速运算

    千次阅读 2019-02-26 10:29:04
    右移:&gt;&gt; express&gt;&gt;n(n&gt;0) 16&gt;&gt;1结果为8:16*(1/2^1) 8&gt;&gt;1结果为4:8*(1/2^1) 4&gt;&gt;2结果为1:4*(1/2^2) 结果为express*(1...

    右移:>>

    express>>n(n>0)

    16>>1结果为8:16*(1/2^1)

    8>>1结果为4:8*(1/2^1)

    4>>2结果为1:4*(1/2^2)

    结果为express*(1/2^n)  (取整)

    同理左移:<<

    结果为express*2^n (取整)

     

    >>0  <<0为取整

    展开全文
  • 简单理解二进制的左移和右移运算

    千次阅读 2014-12-02 13:37:03
    左移:x 有符号右移:与左移相反:x>>5==x/(2的5次方)
  • 运算——左移和右移

    千次阅读 2019-10-23 09:59:34
    1.运算规则: 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的 空位补零。 2.语法格式: 需要移位的数字 << 移位的次数 例如: 3 << 2,则是将数字3左移2位 计算过程: 3 <&...
  • 左移等效于乘以2,右移等效于除以2。 #include <stdio.h> int main() { int a; /*printf("please input a number: "); scanf("%d",&a); printf("~a=%d",~a);*/ printf("please input a number: ")...
  • C:位运算之 左移运算和右移运算

    千次阅读 2018-04-08 21:53:51
    和右移运算(&gt;&gt;) 在C中,位运算包含两种移位运算: 左移运算:&lt;&lt; 右移运算:&gt;&gt; 左右位移运算,在数值为无符号有符号情况下具有不同行为。 有符号左右位移运算 ...
  • //把i里的值左移2位也就是说,1的2进制是000…0001(这里1前面0的个数int的位数有关,32位机器,gcc里有31个0),左移2位之后变成 000…0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了...
  • 1.异或运算 ^ 相同为0,相异为1 2. 左移 高位(左边)丢弃,低位(右边)补0 左移n位,将它的值乘以2的n次方 3. 右移 符号位不变,低位舍弃,高位补上符号位 右移n位,将它的值除以2的n次方 参与运算:补码参与运算...
  • 左移右移运算 的目的

    2019-02-28 22:21:49
    在C语言中或者java中常常会出现这样的标示&gt;&gt; &lt;&lt; 比如int a=10 a&...这样看很难看清楚是什么意思,需要转换成二进制来标示 ...10二进制的标示为:1010 1010向右移动两位是:0010=2;...
  • 运算左移右移

    千次阅读 2019-03-28 16:57:21
    运算数的二进制整体左移 指定位数 ,低位用0补齐,将一个数 左移一位扩大2倍 ,以此类推。 0 0 0 0 0 0 0 1 1 整体左移一位,低位补 0 0 0 0 0 0 0 1 0 2 再次左移一...
  • 运算中的左移和右移的计算详解

    千次阅读 2017-09-08 09:19:44
    正数的左移和右移 以3为例 3的二进制为 00000011 右移2位的时候将最右的11去掉左边补00结果为:00000000 — >十进是中的0 左移2位的时候将最左的00去掉右边补00结果为:00001100 —–>十进是中的12对于-3来说,...
  • python 位操作符 左移和右移 运算

    千次阅读 2013-11-04 17:46:56
    左移运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。语法格式:需要移位的数字<<移位的位数例如:3<<2则是将数字3左移动2位计算过程:3<<2首先把3...
  • 左移运算和右移运算

    2019-07-19 00:04:40
    左移运算 2<<2; 求i的值? //结果等于左操作数乘上2的右操作数次方,于是结果是8 2*2²=8 右移运算 64>>2求值为多少 //结果等于左操作数除以右操作数次方,结果为16 64/(2²)=16 ...
  • 1、java中得左移与右移规则 n>>1 n右移一位,最高位为1,则补1,最高位为0,则补0; 示例:n = 13; 二进制:n 表示:1101; n>...1 : 1110(最高位补1);...2、左移右移得应用: **、判断一个数得二...
  • 左移和右移运算

    千次阅读 2012-07-02 17:50:02
    C语言里的左移和右移运算 转自:http://www.cppblog.com/tx7do/archive/2006/10/19/13867.html  1、 先说左移, 左移就是把一个数的所有位都向左移动若干位,在C中用 int i = 1; i = i  也就是说,1的2进制...
  • 运算以及位的左移和右移

    千次阅读 2019-03-29 22:34:34
    1、左移:m<<n。左移n位的时候,最左边的n位将被... 2、右移:m>>n。 (1)无符号数值:最右边n位被丢弃,最左边用0填补。 (2)有符号数值:用符号数填补最左边。原先是0即正数,则用0填补。 1...
  • 运算 按位与(&);按位或(|);按位取反(~);按位异或(^);左移(<<);右移(>>) 1.左移运算符(<<): 左移运算符就是将二进制进行左移 y\ y y,末尾补0。作用相当于对...
  • 运算-左移右移

    千次阅读 2021-03-05 16:54:21
    1、不同数据类型的位运算 1.1、左移"<<" 1.1.1、 int、long类型           对于int类型来说,其二进制位为32位,所以每32位取一次模。我们来看下面的代码...
  • 右移) 运算符是用来执行移位运算左移 (<<) 将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0。 左移相当于乘.左移一位相当于乘2;左移两位相当于乘4;左移三位相当于乘8。 x<<1...
  • 文章目录一 、原码补码1.1 原码表示法1.2 补码表示法二、C++正数/负数的左移和右移2.1 正数的左移和右移2.2 负数的左移和右移2.3 扩展(对正负数都适用,下面以正数为例) 一 、原码补码 对数据用n位二进制数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,419
精华内容 20,567
关键字:

左移和右移的运算规则