逻辑右移相当于除以2吗
答:逻辑右移最高位补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...
答:逻辑右移最高位补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...
答:1、相同点:汇编语言中SAR和SHR指令都是右移指令,SAR是算数右移指令(shift arithmetic right),而SHR是逻辑右移指令(shift logical right)。2、两者的在于SAR右移时保留操作数的符号,即用符号位来补足,而SHR右移时总是用0来补足。例如10000000算数右移一位是11000000,而逻辑右移一位是01000000。
答:右移1位以后为1001011=1*2^6+0*2^5+0*2^4+1*2^3+0*2^2+1*2^1+1*2^0 相当于所有的加权都-1,则相当于除以2 补充,你那种最高位保留的,最高位是作为符号位的,所以保留,实际数值是后面的7位,如1001 0110,则右移后为10001011,也是要补个0的 ...
答:右移一位,若符号位为1,就在左边补1,;否则,就补0。\x0d\x0a所以算术右移也可以进行有符号位的除法,右移,n位就等于除2的n次方。\x0d\x0a\x0d\x0a例如,8位二进制数11001101分别右移一位。\x0d\x0a逻辑右移就是[0]1100110\x0d\x0a算术右移就是[1]1100110 ...
答:1、右移,除以2右移n位除以2的n次方;右移的概念和左移相反,就是往右边挪动若干位,运算符是>>;右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:inti=0x80000000;i=i>>1;//i的值不会变成0x40000000,而会变成0xc0000000 2、左移,乘以2...
答:逻辑左移一位相当于无符号数乘以2 逻辑右移一位相当于无符号数除以2 1)算术移位 当乘数或除数是2n时,算术移位用来快速地完成对整数进行乘法或除法的运算。算数左移n位相当于乘上2n,执行方法是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补0。2)...
答:例如,将一个整数值向右移动一位,实际上是将该值除以2的效果,同时将最右侧的空位填充为符号位。这是因为右移操作将最高位的值复制到新的最低位位置,从而形成算术移位。这与左移运算符的行为形成对比,左移运算符是将数字的所有位向左移动,相当于乘以指定的幂数。在编程中,根据特定的需求选择合适...
答:这种操作在各种编程语言中被广泛利用,尤其是在处理二进制整数时。通过逻辑左移功能,程序员可以将二进制数向左移动指定的位数,这时数值的二进制表示会相应地在右侧填充零,等同于数值乘以2的对应次方。相反,逻辑右移操作则会在左侧填充零或符号位,效果是数值除以2的指定次方。在实际应用中,shift操作...
答:SAR 算术右移.SHR 逻辑右移.效果才除以二;比如10B(二进制)=2(十进制),右移一位为1=2/1;左移一位为100B(二进制)=4(十进制)。若AX=0000 0001B,ROR AX,1或RCR AX,1循环右移后AX=1000 000B,比原数1大多了,怎么会是AX/2的结果呢?
网友评论:
叶祝18263894167:
SAR SHR等右移左移的究竟是对数据做什么? -
67337终狮
: 左移和右移指令可以用于部分因数或除数是2的整数幂的数的乘法或除法运算 比如110011进行逻辑右移一位之后,就相当于除以2,这个原理和对十进制的数进行乘以10,100,1000或除以10,100,1000的原理是一样的 SHR是对无符号数进行的,SAR是对有符号数进行的 因为移位指令的指令周期比乘法和除法快很多,所以如果除数或乘数是那些特殊的数的话,首选用移位指令,不过用移位指令计算除法只能得到商,不能得到余数移位指令可以BCD码的压缩我就知道这些了
叶祝18263894167:
汇编移位指令算术右移指令为什么相当于除以2. 如: 1001 0110 右移1位就是:1100 1011. 并没有除2啊 -
67337终狮
: 1001 0110 算数右移1位1100 1011.这是没有问题的; 下面解释一下为什么没有你所说的除以2: 所谓的除以2针对的是原码,而不是补码,你这边这个例子需再取补得到原码才能进行数值大小的比较,结果显示除以2没毛病
叶祝18263894167:
这两句汇编指令用C语言怎么表示? -
67337终狮
: 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位
叶祝18263894167:
请教一个汇编指令
67337终狮
: 这就是著名的逻辑右移指令,将32位寄存器ebx的值,右移一位,高位用0填充某些情况下,其实也相当于除以2(不考虑奇数,即末位为1)很多优化编译器会把x/2编译为右移1位因为移位操作速度相当地块,比除法快不知多少倍.比如ebx=256(十进制),右移一位后变成(128)
叶祝18263894167:
int x=12;【x>>1;】为什么说x的值被右移了一位,“相当于除以2”?... -
67337终狮
: x>>1这个是C语言中的按位操作! 二进制中,进位是满2进1 所以,右移一位就是除以2!
叶祝18263894167:
如果使用右移运算符移动1位,相当于除以2的话,那么, - 10>>2,应该相当于 - 10除以4,可? -
67337终狮
: 所提的问题的回答正确. 右移1位相当于除以2,这个只有正数适用,而负数不适用. 右移运算符,移位运算符的一种:程序设计中,位操作运算符的一种.在c++中,移位运算符组成的表达式也属于算术表达式,其值为算术值. 右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定.在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1.
叶祝18263894167:
左移右移运算右移相当于是除,左移相当于就是乘,左移一位乘以2,左移二位乘以4,依此类推.无论正数、负数,它们的右移、左移、无符号右移32位都是... -
67337终狮
:[答案] >>右移时,空出来的高位用1还是0补上是由计算机系统决定的,不过从你给的题目可看出,是由要位移的数的高位决定的,如果高位为1则用1补,高位为0则用0补, -5用十六进制表示就是0xffff fffb,右移3位,高位空出来的3位用1补,就是0xffffffff,...
叶祝18263894167:
ASCII 码值加1和右移1位一样么?? -
67337终狮
: 当然不一样.加1就是加1,1+1=2,2+1=3.但右移是将其原码(即二进制码)右移一位(相当于整除2),1>>1就变成0了,2>>1就变成1了.
叶祝18263894167:
请教高手——汇编语言基础问题
67337终狮
:首先,你应该明白,你说的逻辑右移算术右移 和循环右移 除了都是右移以外并没有什么太大的关系 所谓循环右移是将一个数位的最后一位移到第一位 它的功能:比如你想让一组小灯逐个亮,那么你可将(比如数1000000)右移并输出,那样它就逐个亮了 带进位循环,就是在向左或右循环时带上C一块循环 因为一些指令的操作回影响标志位(如C),那样的话带上C一块循环就能实现一些特殊一点的功能了 具体的就是要看你要做什么了