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位值填充