Laan's steps..

Feed Rss

as位操作

10.16.2008, flash, flex, by .

as3的位操作就几样,~ | & << >> >>>

以前也是看过文档说明。当时是觉得很简单啊,想以后遇到再看下文档就可以了。结果到最近真正大量使用时就发现,一切并非这么简单。所以啊,什么事,一定得自己去尝试下。想起高中化学老师老说的一句话:纸上得来终觉浅,绝知此事要躬行。确是如此~

ps: 古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。—— 陆游 冬夜读书示子聿

就列举一些常用的操作或该注意的地方吧,以int数据为例:

1:int>>35 = int >> (35%32) = int>>3  int是4个字节共32位

<<也是这样。就是说int>>32=int

2:取int的最后一个字节值:

2.1 int & 0xff

2.2 int<<24>>>24

3:去int的第a至b位(包括a,b位):int<<(a – 1)>>>(32- b + a – 1) —— 这里位数从1开始,及1-32位(int)

4:取int1的后a位与int2的前b位组成int——在swf文件解析时经常遇到这样的问题:

int<<(32 – a)>>>(32 – a – b) | (int1>>>(32 – b))

5:取第a位:int<<(32 – a – 1)>>>31

…………呵呵,还有很多很多

其实最重要的还是自己去尝试下。但是有的地方得注意下。

一般的语言有<< >>但是没有>>>,就像ruby,它就没有>>>操作。其实,as3中的>>>也就是ruby中的>>的——只不过adobe的工程师们更了解as3而以,他们设计了>>>,让>>>去做无符号右移操作,而>>做有符号右移。当你正真遇到问题时,比如你要读取SB[n]或UB[n],你就会发现,他们真的是太帅了。一切都为你想到了!!!!!

比如:                                        10110000 00000000 00000000 00000000

进行 >>2操作,得到的是            11101100 00000000 00000000 00000000     前面补足位以最前面的位值填充

进行 >>>2操作,得到的是         00101100 00000000 00000000 00000000     前面补足位以0位值填充

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>