我即将完成一个分配,并且在最后一个问题上,我试图做到这一点,但是我不知道我是否正确使用了移位。
对于这个问题,我必须提取整数的右字节,然后获取该右字节的前3位,后3位和后2位,并将其分配给无符号整数变量。
到目前为止,我尝试过的是:
OrdDict
我想知道我是否朝着正确的方向前进
答案 0 :(得分:0)
我会这样做:
var firstByte = y & 0xff;
这是最低有效字节。如果y
中的值为12
,则所有位都在该字节中。
然后,要隔离该字节的各个部分,必须使用&
截去所有不需要的位,然后使用>>
来获取这些位进入最低有效位置。这样做的顺序无关紧要,尽管它决定了您放在&
另一侧的内容:
var first3 = firstByte & 0x07; // no need to shift
var second3 = (firstByte >> 3) & 0x07; // shift by 3 and then mask off the rest
var last2 = (firstByte >> 6) & 0x03; // shift by 6 and mask
在二进制文件中,0x07
看起来像00000111
。因此,使用&
与可以隔离数字中的最低有效3位。
在下面进行测试。
JavaScript有点奇怪,因为在所有这些操作之间,该语言都将数字保持为64位浮点值。但是,对于整数值来说,这并不重要,实际上,如果对事物确实很聪明,那么优化的运行时实际上可能实际上并不能保持浮点表示形式。
var y = 2359; // binary: 100100110111
var firstByte = y & 0xff;
console.log("firstByte: " + firstByte);
var first3 = firstByte & 0x07;
console.log("should be 7: " + first3); // should be 7
var second3 = (firstByte >> 3) & 0x07;
console.log("should be 6: " + second3); // should be 6
var last2 = (firstByte >> 6) & 0x03;
console.log("should be 0: " + last2); // should be 0