我对移位问题的逻辑正确吗?
Is my logic on a bitshifting question right?
我刚刚完成作业,在最后一个问题上我尝试这样做,但我不知道我是否正确使用了移位。
对于这个问题,我必须提取一个整数的右字节,然后获取右字节的前 3 位、后 3 位和后 2 位,并将其分配给无符号整数变量。
目前我尝试过的是:
int rightmost = (y>>24)&0xFF // to get rightmost byte
int first = (rightmost <<< 1)&0xFF // to get first 3 bits of that byte
int second = (rightmost >>> 3)&0xFF // to get next 3 bits
int third = (rightmost >>> 6)&0xFF // to get last 2 bits
我只是想知道我的方向是否正确
我会这样做:
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
我刚刚完成作业,在最后一个问题上我尝试这样做,但我不知道我是否正确使用了移位。
对于这个问题,我必须提取一个整数的右字节,然后获取右字节的前 3 位、后 3 位和后 2 位,并将其分配给无符号整数变量。
目前我尝试过的是:
int rightmost = (y>>24)&0xFF // to get rightmost byte
int first = (rightmost <<< 1)&0xFF // to get first 3 bits of that byte
int second = (rightmost >>> 3)&0xFF // to get next 3 bits
int third = (rightmost >>> 6)&0xFF // to get last 2 bits
我只是想知道我的方向是否正确
我会这样做:
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