逻辑右移相当于除以2吗
答:给你举个例子吧 比如说,A=7;把A化成二进制的就是111;A/2是十进制的运算,也就是7/2 = 3;A>>=1是将A的二进制位向右移一位,也就得到011,结果也是3;一般情况下这两种运算结果都会相同的,如7 = 1*2^2+1*2^1+1*2^0;除以2以后 1*2^1+1*2+1*2^-1;结果也就差在最后的...
答:同样右移补在前面,.算数移位左移一位1011 1000 0000 0000相当于乘2,因为是乘2所以最高位是不变的,因为最高位代表正数负数,右移一位1000 1110 0000 0000 s相当于除2 逻辑移位左移一位0011 1000 0000 0000直接向左移,最高位不要了,向右移0100 1110 0000 0000直接向右移最高位被0 ...
答:如MOV AL,62HMOV CL,4SHR AL,CL所执行简易理解如下:01100010B 因为是右移操作,也称为右移补0操作,将二进制位逐次在右边去掉一位然后在左边添个0,移多少位重复上述操作多少次。4次移位后结果为00000110B,即06H.【应用】 逻辑右移一位的操作,相当于将寄存器或存储器的无符号数除以2,因此...
答:1、右移,除以2右移n位除以2的n次方;右移的概念和左移相反,就是往右边挪动若干位,运算符是>>;右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:inti=0x80000000;i=i>>1;//i的值不会变成0x40000000,而会变成0xc0000000 2、左移,乘以2...
答:用8位补码表示整数-126的机器码,算数右移一位的结果是-63,过程如下:首先-126转换成二进制,第一位为符号位;符号位保持不变,其他位取反得到反码;反码加1得到补码。结果如下:原码:1111 1110 反码 : 1000 0001 补码:1000 0010 将补码算术右移一位,得到结果为新结果的补码;补码减一得到反码...
答:逻辑右移就是不考虑符号位,右移一位,左边补零即可。算术右移需要考虑符号位,右移一位,若符号位为1,就在左边补1,;否则,就补0。所以算术右移也可以进行有符号位的除法,右移,n位就等于除2的n次方。例如,8位二进制数11001101分别右移一位。逻辑右移就是[0]1100110 算术右移就是[1]...
答:看你的分类是在c和c++的,那应该是说基于二进制的数值运算,也就是位运算,举个例子,把一个十进制的数字,比如把4算术右移一位,这样相当于除2,结果等于2,。具体的分析请百度位运算,链接是http://baike.baidu.com/view/379209.htm?fr=aladdin。
答:126的二进制是01111110,所以-126的补码是126的二进制码“取反加1”,为10000010。算术右移一位,因为左边的符号位为1,所以左边补上1,得到11000001,符号位为1,是某负数的补码,将其“减1取反”,得到其绝对值的二进制码为00111111,即63,所以该负数为-63。
答:2、右移运算符(>>)规则:按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。语法格式:需要移位的数字 >> 移位的次数,例如11 >> 2,则是将数字11右移2位。数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。
答:1、右移,除以2右移n位除以2的n次方;右移的概念和左移相反,就是往右边挪动若干位,运算符是>>;右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:inti=0x80000000;i=i>>1;//i的值不会变成0x40000000,而会变成0xc0000000 2、左移,乘以2...
网友评论:
邴亚15248637660:
汇编移位指令算术右移指令为什么相当于除以2. 如: 1001 0110 右移1位就是:1100 1011. 并没有除2啊 -
43116明钱
: 1001 0110 算数右移1位1100 1011.这是没有问题的; 下面解释一下为什么没有你所说的除以2: 所谓的除以2针对的是原码,而不是补码,你这边这个例子需再取补得到原码才能进行数值大小的比较,结果显示除以2没毛病
邴亚15248637660:
int x=12;【x>>1;】为什么说x的值被右移了一位,“相当于除以2”?... -
43116明钱
: x>>1这个是C语言中的按位操作! 二进制中,进位是满2进1 所以,右移一位就是除以2!
邴亚15248637660:
逻辑位移 算术位移 的概念 -
43116明钱
: 逻辑右移最高位补0,最低位进入CF,相当于每移一位除以2,一般对于无符号数使用 如:133/8=16余5 MOV AL,10000101B MOV CL,03H SHR AL,CL AL=10H=16 算术右移最高位(即符号位)保持不变,而不是补0最低位进入CF.相当于每移一位除2,一般对于有符号数使用 -128/8 MOV AL,10000000B MOV CL,03H SAR AL,CL AL=0F0H=-16 1100为000011000正数,逻辑右移 算术右移是一样的为00000110 11001000逻辑右移为01100100 11001000算术右移为11100100
邴亚15248637660:
SAR SHR等右移左移的究竟是对数据做什么? -
43116明钱
: 左移和右移指令可以用于部分因数或除数是2的整数幂的数的乘法或除法运算 比如110011进行逻辑右移一位之后,就相当于除以2,这个原理和对十进制的数进行乘以10,100,1000或除以10,100,1000的原理是一样的 SHR是对无符号数进行的,SAR是对有符号数进行的 因为移位指令的指令周期比乘法和除法快很多,所以如果除数或乘数是那些特殊的数的话,首选用移位指令,不过用移位指令计算除法只能得到商,不能得到余数移位指令可以BCD码的压缩我就知道这些了
邴亚15248637660:
如果使用右移运算符移动1位,相当于除以2的话,那么, - 10>>2,应该相当于 - 10除以4,可? -
43116明钱
: 所提的问题的回答正确. 右移1位相当于除以2,这个只有正数适用,而负数不适用. 右移运算符,移位运算符的一种:程序设计中,位操作运算符的一种.在c++中,移位运算符组成的表达式也属于算术表达式,其值为算术值. 右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定.在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1.
邴亚15248637660:
为什么说x的值被右移了一位,“相当于除以2” -
43116明钱
: 这是二进制计数规则 二进制1000是十进制8 二进制100是十进制4 二进制10是十进制2
邴亚15248637660:
请教高手——汇编语言基础问题
43116明钱
:首先,你应该明白,你说的逻辑右移算术右移 和循环右移 除了都是右移以外并没有什么太大的关系 所谓循环右移是将一个数位的最后一位移到第一位 它的功能:比如你想让一组小灯逐个亮,那么你可将(比如数1000000)右移并输出,那样它就逐个亮了 带进位循环,就是在向左或右循环时带上C一块循环 因为一些指令的操作回影响标志位(如C),那样的话带上C一块循环就能实现一些特殊一点的功能了 具体的就是要看你要做什么了
邴亚15248637660:
这两句汇编指令用C语言怎么表示? -
43116明钱
: shr 逻辑右移指令 movzx 无符号扩展指令------- shr eax, 8 右移相当于除,右移1位相当于除以2,右移8位相当于2的8次方:256 就是说,把32位寄存器eax 的值除以256 不过,C语言也有移位运算符 +_+-------- movzx eax,al 就是说,把8位寄存器al 的值赋给32位寄存器eax 的低8位部分,高24位补0-------- 用C语言写:int eax; //把eax认为是一个32位变量...... //一些语句,对eax赋值 eax >>= 8; eax &= 0x000000FF; //取最低的8位
邴亚15248637660:
左移和右移运算符算是位运算符吗? -
43116明钱
: 是的,它们都是位操作符,而已左移和右移又分为算术左移/右移和逻辑左移/右移