Шорты Javacard MultiJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Шорты Javacard Multi

Сообщение Anonymous »

Я пытаюсь преобразовать некоторый код Java в код Javacard, но не могу использовать тип int или long, но столкнулся с проблемой.
У меня есть код, который я хочу преобразовать:

Код: Выделить всё

void someFunction(short a, short b)
{
int x = (int)((int)a * (int)b);
}
Поскольку Javacard вообще не может использовать целочисленные типы, я попытался преобразовать это с помощью функции «multiplyShorts», которая выглядит следующим образом:

Код: Выделить всё

public static short[] multiplyShorts(short a, short b)
{
short aHigh = (short)((a >> 8) & 0xFF);
short aLow  = (short)(a & 0xFF);
short bHigh = (short)((b >> 8) & 0xFF);
short bLow  = (short)(b & 0xFF);
short lowLow = (short)(aLow * bLow);
short highLow = (short)(aHigh * bLow);
short lowHigh = (short)(aLow * bHigh);
short highHigh = (short)(aHigh * bHigh);
short[] result = new short[2];
result[1] = (short)(lowLow & 0xFF);
short carry = (short)((lowLow >> 8) & 0xFF);
short middle = (short)(highLow + lowHigh + carry);
result[1] |= (short)((middle & 0xFF) > 8) & 0xFF);
result[0] = (short)(result[0] + highHigh);
return result;
}
Этот код работает в большинстве случаев, но в случае a=0xFFFF и b=0xFFFF я ожидаю:

Код: Выделить всё

result[0] = 0xFFFE = 0b11111111_11111110
result[1] = 0x0001 = 0b00000000_00000001
Однако результат, который я получаю:

Код: Выделить всё

result[0] = 0xFEFE = 0b11111110_11111110 //Spot the difference on this line
result[1] = 0x0001 = 0b00000000_00000001
Может ли кто-нибудь объяснить мне, чего мне здесь не хватает, или помочь мне преобразовать мой код?


Подробнее здесь: https://stackoverflow.com/questions/790 ... ply-shorts
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»