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,所以我需要应用类型cast
uint()
?还是只使用普通int,然后使用
(byte)(intbyte&(byte)0xff)写入字节
?代码只使用较低的8位,只需忽略uint内容,只使用Java
int
,并如前所述使用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);