ActionScript 3中的位操作与Java的比较
我正在研究将ActionScript 3中的位操作与Java的比较,java,actionscript-3,actionscript,Java,Actionscript 3,Actionscript,我正在研究将位字符串写入字节数组的AS3代码。资料来源: private var byteout:ByteArray; 私有变量bytenew:int=0; 私有变量bytepos:int=7; 私有函数写息(bs:位字符串):无效 { var值:int=bs.val; var posval:int=bs.len-1; while(posval>=0){ if(value&uint(1我相信这些是AS3的位移位运算符 这是关于AS3中的位操作的。Java文档页解释了操作符的操作 至于if条件,它
位字符串
写入字节数组
的AS3代码。资料来源:
private var byteout:ByteArray;
私有变量bytenew:int=0;
私有变量bytepos:int=7;
私有函数写息(bs:位字符串):无效
{
var值:int=bs.val;
var posval:int=bs.len-1;
while(posval>=0){
if(value&uint(1我相信这些是AS3的位移位运算符
这是关于AS3中的位操作的。Java文档页解释了操作符的操作
至于if条件,它检查值中右侧的第位“posval”是否为1。它通过在值之间应用按位和,并将值1(二进制中的000…01)按posval位移位来“选择”该位。Java中的按位操作有些笨拙,因为Java没有无符号类型。
因此,当您打算使用字节时,应确保始终使用字节。0x0f | 0x80->0b1000 1111使用字节完成的操作必须始终转换为字节:
System.out.printf("%x - %x - (byte)%x - (int)%x\n",
(byte)0x80,
(byte)0xf,
(byte)((byte)0x80|(byte)0xf),
(int)((byte)0x80|(byte)0xf));
OUTPUT:
80 - f - (byte)8f - (int)ffffff8f
说到这里,您可能希望从一开始就使用int,然后再转换为字节
您提供的代码将位字符串转录成字节数的位流
如果设置了字节的所有位,则处理特殊情况,在这种情况下输出0xff00
uint是什么(1 Java没有unsigedint,所以我需要应用类型castuint()
?还是只使用普通int,然后使用(byte)(intbyte&(byte)0xff)写入字节
?代码只使用较低的8位,只需忽略uint内容,只使用Javaint
,并如前所述使用writeByte()使用显式转换的字节。因此,Java中的if条件是if((值&(1)Yes,这样就可以了。uint()在AS3中防止运行时错误。您可以在中看到示例:
System.out.printf("%x - %x - (byte)%x - (int)%x\n",
(byte)0x80,
(byte)0xf,
(byte)((byte)0x80|(byte)0xf),
(int)((byte)0x80|(byte)0xf));
OUTPUT:
80 - f - (byte)8f - (int)ffffff8f
1 << 4 -> 0b00010000
byte realByte = (byte)(intbyte & (byte)0xff);
writeByte(realByte);