精华内容
下载资源
问答
  • 按位向右移位运算符

    2013-07-12 11:00:26
    按位向右移位运算符 将 expression1 和 expression2 转换为 32 位整数,并将 expression1 中的所有位向右移动由 expression2 转换所得到的整数指定的位数。移到右端以外的位将被舍去。若要保留原始 expression 的...

    按位向右移位运算符

      将 expression1 expression2 转换为 32 位整数,并将 expression1 中的所有位向右移动由 expression2 转换所得到的整数指定的位数。移到右端以外的位将被舍去。若要保留原始 expression 的符号,则如果 expression1 的最高有效位(最左端的位)为 0,那么左侧的位都填补 0;如果最高有效位为 1,那么左侧的位都填补 1。将一个值右移一位等效于将它除以 2 并舍去余数。

      浮点数通过舍去小数点后面的所有位来转换为整数。正整数转换为无符号的十六进制值,其最大值为 4294967295 0xFFFFFFFF;转换大于最大值的数时,会舍去最高有效位,因此该值仍保持为 32 位。负数通过 2 的补码标记转换为无符号的十六进制值,其最小值为 -2147483648 0x800000000;小于最小值的数转换为精度更高的 2 的补码,同时也会舍去最高有效位。

      由于返回值解释为带符号的 2 的补码数,因此,返回值将是 -2147483648 2147483647 范围中的一个整数。

      操作数

      expression1 : Number - 要向右移位的数字或表达式。

      expression2 : Number - 转换为从 0 31 的整数的数字或表达式。

      返回 Number - 按位运算的结果。

      示例

      下面的示例将 65535 转换为 32 位整数,然后右移 8 位:

      var x:Number = 65535 >> 8; 
      trace(x); // outputs 255

      下面的示例显示上一示例的结果:

      var x:Number = 255;

      四、>>= 按位向右移位并赋值运算符

      expression1 >>= expression2

      此运算符执行按位向右移位运算,并将内容作为结果存储在 expression1 中。

      下面的两个语句是等效的:

      A >>= B; 
      A = (A >> B);

      可用性:Flash Player 5ActionScript 1.0

      操作数

      expression1 : Number - 要向右移位的数字或表达式。

      expression2 : Number - 转换为从 0 31 的整数的数字或表达式。

      返回 Number - 按位运算的结果。

      五、>>> 按位无符号向右移位运算符

      expression1 >>> expression2

      除了不保留原始 expression 的符号外,此运算符与按位向右移位运算符 (>>) 相同,这是因为左侧的位始终用 0 填充。

      浮点数通过舍去小数点后面的所有位来转换为整数。正整数转换为无符号的十六进制值,其最大值为 4294967295 0xFFFFFFFF;转换大于最大值的数时,会舍去最高有效位,因此该值仍保持为 32 位。负数通过 2 的补码标记转换为无符号的十六进制值,其最小值为 -2147483648 0x800000000;小于最小值的数转换为精度更高的 2 的补码,同时也会舍去最高有效位。

      可用性:Flash Player 5ActionScript 1.0

      操作数

      expression1 : Number - 要向右移位的数字或表达式。

      expression2 : Number - 转换为从 0 31 的整数的数字或表达式。

      返回 Number - 按位运算的结果。

      示例

      下面的示例将 -1 转换为 32 位整数并向右移 1 位:

      var x:Number = -1 >>> 1; 
      trace(x); // output: 2147483647

      六、>>>= 按位无符号向右移位并赋值运算符

      expression1 >>>= expression2

      执行无符号按位向右移位运算,并将内容作为结果存储在 expression1 中。下面的两个语句是等效的:

      A >>>= B; 
      A = (A >>> B);

      可用性:Flash Player 5ActionScript 1.0

      操作数

      expression1 : Number - 要向右移位的数字或表达式。

      expression2 : Number - 转换为从 0 31 的整数的数字或表达式。

      返回

      Number - 按位运算的结果。

    展开全文
  • Objective-C位运算符-向右移位运算符

    千次阅读 2011-08-26 14:21:05
    与向左移位运算符比起来,这个向右移位运算符(>>)显得稍微复杂些。从值的低位移出的位将丢失。把无符号的值向右移位,也就是总在左侧也就是高位移入0。对于有符号值而言,左侧移入1还是0依赖于被移动数字的符号,还...
    向左移位运算符比起来,这个向右移位运算符(>>)显得稍微复杂些。从值的低位移出的位将丢失。把无符号的值向右移位,也就是总在左侧也就是高位移入0。对于有符号值而言,左侧移入1还是0依赖于被移动数字的符号,还取决于该操作在计算机上的实现方式。如果符号位是0(表示该值是正的),不管哪种机器都将移入0。然后,如果符号位是1,那么在一些计算机上移入1,而其他计算机则可能移入0。前一类型的运算符通常称为算术右移,而后者通常称为逻辑右移

    注意,对于系统使用算术右移还是逻辑右移,千万不要猜测!如果进行此类假设,那么在一个系统上可正确进行有符号右移运算的程序,有可能在其他系统上运行失败。

    两种情况会使计算机产生不可预知的结果:
    第一,试图用大于或等于该数据项的位数将值向左向右移位。例如,计算机用32位表示整数,你要移动32位甚至更多。
    第二,使用负数对值移位。
    展开全文
  • char类型数据向右移位时符号位问题

    千次阅读 2012-03-02 15:11:24
    看来是,VC上运算移位时左边填充0,KEIL C51上运算移位时左边填充的是1. int debug = 0; debug = hex & 0xf0; sendNChar(&debug, 2); KEIL C51下输出ff e0 VC下输出e0 找到这里知道程序...
    首先运行环境是51单片机+KEIL C
    最近写一个16进制数据转换成ASCII形式的函数,多次运行发现,当16进制数据高4位大于8时,转换就


    出错。
    最开始出错的程序如下:
    void hex2ascii(char hex, char ascii[])
    {
    	char i = 0;
    	
    	ascii[0] = (hex & 0xf0) >> 4;
    	ascii[1] = hex & 0x0f;
    	
    	sendNChar(ascii, 2);
    	
    	for (i=0; i<=1; i++)
    	{
    		if (ascii[i] >= 0xa)
    		{
    			ascii[i] = ascii[i] - 0xa + 'A';
    		}
    		else
    		{
    			ascii[i] = ascii[i] + '0';
    		}
    	}
    	
    	sendNChar(ascii, 2);
    }


    在KEIL C51环境下,输入0xe3,输出fe 03 2e 33。
    在VC环境下,输出输入0xe3,输出e 3 45 33
    后来多次修改尝试,并分析原因。终于发现原因:hex是char类型,是有符号型,移位左边补符号位1。


    故得fe,ascii[0]=0xfe是负数,小于0xa,故结果=0xfe+'0'=0x2e(溢出后结果)。


    但不对,VC上运行正常呀,再分析
    在VC上,int型占32位
    按照C语言的自动类型转换原理
    hex & 0xf0,分别是char和const int类型,转换成int型0xffffffe3 & 0x000000f0 = 0x000000e0


    看来是,VC上运算移位时左边填充0,KEIL C51上运算移位时左边填充的是1.
    	int debug = 0;
    	debug = hex & 0xf0;
    	sendNChar(&debug, 2);


    KEIL C51下输出ff e0

    VC下输出e0


    找到这里知道程序错误的起因了,但hex & 0xf0处理的原因还不了解。
    先断续调我的51程序。
    这种地方 以后都要用unsigned char类型了,免得不必要的麻烦!

    展开全文
  • 结论很清楚,通过移位能得到更好的效率。 另外,感谢 @ egmkang,让我明白了,在a等于负数的时候,以上两种方式可能会得到不同的结果。 如果a == -3,那么a/2 == –2;但是 a>>1会等于-1。 转载于:...

    我有如下三行代码:

    	
    	int a = 8;
    	int ret = a/2;
    	ret = a >> 1;
    

    现在讨论上面两种实现除以2方式的性能,我们有如下伪汇编代码:

     

    	
    int a = 8;
    013B143E  mov         dword ptr [a],8			\\ 将8赋值为变量a
    	int ret = a/2;
    013B1445  mov         eax,dword ptr [a]			\\ 将a的值赋值给eax
    013B1448  cdq									\\ 双字转换为4 字(把EAX 中的字的符号扩展到EDX 中去)
    013B1449  sub         eax,edx					\\ 用eax减去edx,并将结果存入eax
    013B144B  sar         eax,1						\\ 将eax算术右移一位
    013B144D  mov         dword ptr [ret],eax		\\ 将eax的值写入到ret地址中
    	ret = a >> 1;
    013B1450  mov         eax,dword ptr [a]			\\ 将a的值赋值给eax
    013B1453  sar         eax,1						\\ 将eax算术右移一位
    013B1455  mov         dword ptr [ret],eax		\\ 将eax的值写入到ret地址中
    

    结论很清楚,通过移位能得到更好的效率。

    另外,感谢@egmkang,让我明白了,在a等于负数的时候,以上两种方式可能会得到不同的结果。

    如果a == -3,那么a/2 == –2;但是 a>>1会等于-1。

    转载于:https://www.cnblogs.com/quark/archive/2011/11/30/2268807.html

    展开全文
  • 如题。
  • 运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1.语法格式:需要移位的数字 >> 移位的次数packagecom.zzwx.test.shifting;...
  • 在开始前, 不妨计算下, 下面的结果..."是一种"无符号"的右移位操作符, 也就是说无论被操作数是正或负, 向右移位后, 高位补0;但脑海未免还会闪现出如下疑问向右移动负数个位置, 咋移? 难道是向左移?Java中long是8字节...
  • 带符号右移位 分析:num&gt;&gt; n (1)相当于num(num的二进制)向右移动n位。 (2)正数移位:右边(低位)移出部分,直接舍弃,左边(高位)移入部分全部补0。(正数的符号为是0)  负数移位:...
  • 移位运算就是对二进制进行有...把数字 5 左移动 2 位,则返回值为 20。 console.log(5 << 2); //返回值20 用算式进行演示,如图所示。 思考:为啥没有<<<呢 因为左位移是填补右边空出的位,符号位
  • 【图像处理】NEON编码4 - 左右移位

    千次阅读 2015-12-17 20:23:29
    向量移位NEON上的移位与标量ARM编码中可能用到的移位非常相似,即每个向量元素的位数均向左或向右移位,出现在每个元素左侧或右侧的位将被删除;它们不能移位至相邻的元素。带符号元素的向量上发生的右移位由指令...
  • )、带符号的右移位运算符(>>),移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。运算符含义<<左移运算符,将运算符左边的对象左移动运算符右边指定的位数(在低位补0)>&...
  • 即将1010(2进制)向右移位3次,空位由0填充,变为0001(2进制),转为十进制为1 注:溢出的部分不再考虑 可以将右移位操作看做整除操作,结果取整数,如10>>2等价于10/2^3=1 二、数据转换时的溢出问题 将大范围...
  • 负数右移位

    2018-09-20 07:53:24
    默认的情况下,右移的结果是下取整的。比如,-3&gt;&gt;1, 移位的时候结果是 -2,而不是 -1;合理的结果应该是-1(取靠近0的整数值)。下面的代码展示了获得合理的结果的一个技巧: #include &lt;...
  • 右移位运算符

    2017-12-04 13:09:00
    Java中的位运算符: >>表示右移(算术右移),如果该数为正,则高位补0,若为负数,则高位补1; >>>表示无符号右移(逻辑右移),也叫逻辑...正数向右移动几位,得到的数值 = 原数值/2的n次方 ;负...
  • 运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1. 语法格式: 需要移位的数字 >> 移位的次数packagecom.zzwx.test.shifting; ...
  • c语言左移位 右移位

    2012-06-18 09:51:15
    先说左移,左移就是把一个数的所有位都左移动若干位,在C中用<<运算符.例如: int i = 1; i = i << 2; //把i里的值左移2位 也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,...
  • )、右移位运算符(>>>)、带符号的右移位运算符(>>)。1.左移运算符左移运算符用“<<”表示,是将运算符左边的对象,左移动运算符右边指定的位数,并且在低位补零。其实,左移n 位,就...
  • 运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1.语法格式:需要移位的数字 >> 移位的次数packagecom.zzwx.test.shifting;...
  • 前言对于移位操作符,很多人既感到熟悉,又感到陌生。熟悉是因为移位操作符是最基本...移位操作是把数据看作是二进制数,然后将其向左或向右移动若干位的运算。在Java编程语言中,移位操作符包含三种,分别是 <&...
  • 合并两个有序数组_向右循环移位

    千次阅读 2014-06-05 21:21:06
     解答此题可以用向右(左)循环换位合并的思想,先用二分搜索查找a[0]在数组a[k:n-1]中的位置p使得a[p][0][p+1].然后数组a[0:p]向右循环换位p-k+1个位置,换位完成后,数组a[0]及其左边的元素都排序好的元素。对剩下...
  • STEP7-Micro/WIN提供的移位指令能将存储器的内容逐位向左或者向右移动。移动的位数由N决定。向左移N位相当于累加器的内容乘2ⁿ,向右移相当于累加器的内容除以2ⁿ。1、字左移当字左移指令的EN位为高电平“1”时,...
  • 逻辑右移:向右移位时将右边移出的低位丢弃,将左边空出的高位补0 算数移位: 算数左移:向左移位时将左边移出的高位丢弃,将右边空出的低位补0 算数右移:向右移位时将右边移出的低位丢弃,将左边空出的高位补0,...
  • numnum 指定要移位值value 移动的位数。左移的规则只记住一点:丢弃最高位,0补最低位如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了332=1位。2)运算...
  • 下面我们直接进入主题循环右移指令:该指令的助记符,指令代码,操作数,程序步如下表:指令格式:该指令表示的是把D0里面的数据向右移动4位。指令说明:假设D0里面的数据为1111111100000000,循环移位4位就变成了...
  • 学习Java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,但...)能将运算符左边的运算对象左移动运算符右侧指定的位数(在低位补0)。 左移移位相当于乘以2,例如 3 << 2 //12 则是将数字3左...
  • 执行这两条指令时,各位数据向右(或向左)循环移动n位,最后一次移出来的那一位同时存入进位标志M8022中,如图1所示。图1 右、左循环移位指令的使用2、带进位的循环移位指令:带进位的循环右、左移位指令(D) RCR(P)和...
  • 怎么能快速入门Java开发?如何学好位移运算符?学习Java本来就是一件日积月累的事情,或许你... 1) “有符号”左移位运算符(<<)能将运算符左边的运算对象左移动运算符右侧指定的位数(在低位补0)。 左移移...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 838
精华内容 335
关键字:

向右移位