Код: Выделить всё
byte ex[] = new byte[26];
bits = 304;
for (int loop=0; loop>(loop*8)));
System.out.println("Ex value: " + ex[ex.length-1-loop]);
}
Код: Выделить всё
Ex value: 48
Ex value: 1
Ex value: 0
Ex value: 0
Ex value: 0
Ex value: 0
Ex value: 0
Ex value: 0
Код: Выделить всё
var ex = new Int8Array(26);
var bits = 304;
for (var loop = 0; loop < 8; ++loop) {
ex[ex.length - 1 - loop] = (0xFF & (bits >> (loop * 8)));
console.log("Ex value: " + ex[ex.length-1-loop]);
}
Код: Выделить всё
> "Ex value: 48"
> "Ex value: 1"
> "Ex value: 0"
> "Ex value: 0"
> "Ex value: 48"
> "Ex value: 1"
> "Ex value: 0"
> "Ex value: 0"
Для ошибочных вычислений цикл равен 4 (для 48) и 5 (для 1). Оба должны быть равны нулю.
При этом я снова попробовал Java, не присваивая значение массиву, и получил ТАКОЕ ЖЕ, что и JavaScript. Я не могу понять, почему присвоение его массиву байтов имеет значение:
Код: Выделить всё
byte c = (byte)(0xFF&(304>>(4*8)));
int d = (byte)(0xFF&(304>>(5*8)));
System.out.println("c: " + c);
System.out.println("d: " + d);
Код: Выделить всё
c: 48
d: 1
Я нырнул еще немного и обнаружил то, что происходит, см. шестнадцатеричный расчет Java. Когда решение будет найдено, я удалю один из этих вопросов.
Подробнее здесь: https://stackoverflow.com/questions/532 ... javascript
Мобильная версия