移位运算怎么计算 移位运算符的运算规则

www.zhiqu.org     时间: 2024-06-01
移位运算符在程序设计中,是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
中文名
移位运算符
含义
在二进制的基础上对数字进行平移
举例
<<(左移运算符)
属于
位操作运算符
快速
导航
左移运算符(<<)规则

右移运算符(>>)规则:

无符号右移运算符规则:

补充
简介
在c++中,移位运算符有双目移位运算符:<<(左移)和>>(右移)。移位运算符组成的表达式也属于算术表达式,其值为算术值。左移运算是将一个二进制位的操作数按指定移动的位数向左移动,移出位被丢弃,右边移出的空位一律补0。右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。
在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,编译器未做任何优化的情况下(优化后不可预期),规定实际移动 的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是 移动66次和移动2次得到的结果相同。
  三种移位运算符的移动规则和使用如下所示:
左移运算符(<<)规则

  按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
语法格式:
需要移位的数字 << 移位的次数
  例如: 3 << 2,则是将数字3左移2位
计算过程:
3 << 2
  首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12。
数学意义:
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
右移运算符(>>)规则:
按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
语法格式:
需要移位的数字 >> 移位的次数
  例如11 >> 2,则是将数字11右移2位
计算过程:
11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010。转换为十进制是2。
数学意义:
右移一位相当于除2,右移n位相当于除以2的n次方。
无符号右移运算符规则:
按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。
文章来自百度百科

c语言里的移位运算怎么算啊?~

15用2进制表示是:
00001111(1字节),
0000000000001111(2字节),
...
左移2位后是:
00111100(1字节),
0000000000111100(2字节),
...
都是60。
因为最小单位是字节。

  按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。   右移一位相当于除2,右移n位相当于除以2的n次方。  l >>>  运算规则:  按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。  其他结构和>>相似。有的时候,你希望将一个数的二进制值向右或向左移位。执行左移时,在一个数的二进制形式中,所有位都向左移动由移位运算符右侧的操作数指定的位数。 移位后在右边留下的空位将由零来填充。右移位运算符的原理相似,只是朝相反的方向移位。然而,如果数是负数,那么在左侧填充的值就是1而不是0。两个移位 运算符是>>和& gt;=。  来看看下面的例子。假定现在有一个int值-7,它的二进制形式为1111 1111 1111 1111 1111 1111 1111 1001。在代码清单3-36中,我们使-7右移2个位置。代码清单3-36 使用右移位运算符 int x;x = (-7 >> 2); // 11111111111111111111111111111001 becomes// 11111111111111111111111111111110// Write out "x is -2."System.Console.WriteLine("x = {0}.", x);输出3-17展示了代码清单3-36的结果。输出3-17 x = -2.  向右移位时,最右边的比特值会在边界处“离开”,左边的负数位标识符向右移动两个位置,腾出来的空白位置用1来填充。最终结果是-2。


#纪受贺# 在C语言里面移位符号<<,>>是怎样运算的,仁兄们帮帮我啊!!! -
(15942622489): 先要了解一下C语言里所有的位运算都是指二进制数的位运算.即使输入的是十进制的数,在内存中也是存储为二进制形式.“格式是:a=0.功能:将整型数a按二进制位向左移动m位,高位移出后,低位补0.“>>”用法:格式是:a>>m,a和m必须是整型表达式,要求m>=0.功能:将整型数a按二进制位向右移动m位,低位移出后,高位补0.

#纪受贺# 求位运算 详解 -
(15942622489): 巧妙的位运算可以代替很多耗时很长的运算,像x>>1 = x/2 前者的运算速度要比后者快几十倍 #define _RGB32BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24)) 这个宏就是将你输入的argb颜色分量组成一个32位的整数

#纪受贺# 高中物理必修一位移到底怎么运算.讲简单点. -
(15942622489): 位移的定义:质点从三维空间的一个位置运动到另一个位置,它的位置变化叫做质点在这一运动过程中的位移位移的计算没有公式,是根据概念得出的,要不就是题目会给你力学最难也是最基础的,一定要学扎实了!你可以买本专门练习力学的书,这个就是高中物理的准备了.其他都比较简单了

#纪受贺# 位移的运算法则是用……? -
(15942622489): 路程是过程位移是点对点,终点也是A).路程为2AB.例如,某人从A地到B地,然后从B地回A地,此过程中其位移为0(开始是A

#纪受贺# 左移运算符 右移运算符的意义 -
(15942622489): 移位运算符就是在二进制的基础上对数字进行平移.按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移). 在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、...

#纪受贺# - 1右移2位值是什么?详细过程是如何进行移位运算的?
(15942622489): 以16位为例,1是0000 0000 0000 0001 反码是1111 1111 1111 1110 其补码也就是-1为 1111 1111 1111 1111 右移2位 0011 1111 1111 1111 换成2进制么就是 16383 对不对阿??

#纪受贺# 移位运算问题 -
(15942622489): 一个字节是8位,如果是i和j是unsigned char类型的话,也就是一个字节,64二进制为00100000,左移两位为10000000,即256,所以1不会被丢掉.如果是其他数据类型,位数更多,一样不会丢失.左移N位,在不丢失1的情况下就相当于原值乘以2的N次幂,同理右移相当于处以2的N次幂.

#纪受贺# 移位运算 >> >>> -
(15942622489): 无符号右移运算符 (>>>)右移表达式的位,不保留符号.result = expression1 >>> expression2>>> 运算符把 expression1 的各个位向右移 expression2 指定的位数.右移后左边空出的位用零来填充.移出右边的位被丢弃 例如 m=-3>>>2 -3的补码为1111 1101 此时m=0011 1111而>>对于无符号的数是和上面一样但要是是有符号的 则要取决于所用的操作系统 分为逻辑右移 即在最高位补0 算术右移 即在最高位补1

#纪受贺# C语言中位移位运算符? -
(15942622489): 位移位运算符,顾名思议,用来移位用.如:a=0x01;a <<=2;则,a变成0x04了.上面是左移,如果右移是a >>= 2;

#纪受贺# c语言中的位移运算是怎样执行的啊,最好有例子...... -
(15942622489): 左移就是把二进制表示,向左面移动,右边补零,超过部分会丢弃 比如char x = 126, 是8位的,11111110 左移2位,补2个零,11 1111 1000,本来8位,会丢弃超出的2位 得到 11111000 右移,是右面部分丢弃一些位,左面补零 比如char x = 126, 是8位的,11111110 右移2位,丢弃2位, 111111,本来8位,少2位,补零得到 00111111