hyhthb 发表于 2009-1-9 20:18

怎样用matlab实现左移运算

怎样用matlab实现左移运算?希望各位大侠帮忙!谢谢!
我要实现的是左移不是循环左移?下面是我写的代码:
m=;是实现左移4位,i是移位前的数。但是结果不对???

ChaChing 发表于 2009-1-9 20:46

回复 楼主 hyhthb 的帖子

左移运算? 可否举例!?

sogooda 发表于 2009-1-9 22:16


?a=1:10
a =
   1   2   3   4   5   6   7   8   9    10
?n=3;
?b=
b =
   4   5   6   7   8   9    10   0   0   0

sogooda 发表于 2009-1-9 22:21

回复 沙发 ChaChing 的帖子

我也只能按照楼主的帖子瞎猜一下,或许是楼上的意思吧。
不过,在计算机术语中有一个“左移运算”,是把一个数值按位左移,不知道这个术语两岸是否一致。


12.7 左移运算符

左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃。例如
int a,b;
a=5;
b=a<<2;
则b=20,分析过程如下:
(a)10=(5)10=(0000 0000 0000 0101)2
b=a<<2;
b=(0000 0000 0001 0100)2=(20)10
从上例可以的知b/a=4=22,可以看出位运算可以实现二倍乘运算。由于位移操作的运算速度比乘法的运算速度高很多。因此在处理数据的乘法运算的时,采用位移运算可以获得较快的速度。
提示 将所有对2的乘法运算转换为位移运算,可提高程序的运行效率



[ 本帖最后由 sogooda 于 2009-1-9 22:30 编辑 ]

ChaChing 发表于 2009-1-9 22:38

回复 地板 sogooda 的帖子

谢谢! 又知道些许东东了!
将所有对2的乘法运算转换为位移运算,可提高程序的运行效率

[ 本帖最后由 ChaChing 于 2009-1-10 07:39 编辑 ]

sogooda 发表于 2009-1-10 14:48

回复 5楼 ChaChing 的帖子

刚刚找到,bitshift可以实现移位运算功能,但是只对整数有效。

C = bitshift(12, 2)
C =
    48

bitshift(5.3,1)
??? Error using ==> bitshift
Inputs must be integers.

其他的位运算函数也列出来供大家参考吧。
bitand
按位与

bitor
按位或

bitxor
按位异或

bitcmp
按位取反

bitget
获取某一位

bitset
设置某一位

[ 本帖最后由 sogooda 于 2009-1-10 14:58 编辑 ]

ChaChing 发表于 2009-1-10 16:58

回复 6楼 sogooda 的帖子

对楼主可能有所帮助!

hyhthb 发表于 2009-1-14 10:40

:@) 谢谢大家的热心帮助!

hyhthb 发表于 2009-1-14 11:12

就是sogooda所说的那种,还有一种是循环左移也就是溢出的位放在空位上,比如:
a=循环左移2位后a=

ChaChing 发表于 2009-1-14 13:14

原帖由 hyhthb 于 2009-1-14 11:12 发表 http://www.chinavib.com/forum/images/common/back.gif
...a=循环左移2位后a=
这个就要使用circshift !

sogooda 发表于 2009-1-14 13:51


?a=1:10
a =
   1   2   3   4   5   6   7   8   9    10
?n=3;
?b=
b =
   4   5   6   7   8   9    10   1   2   3
页: [1]
查看完整版本: 怎样用matlab实现左移运算