short BitwiseTest(short value)
{
short test1 = ((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return (test1 | test2);
}
Приведенный выше код должен быть (неэффективным) примером, который меняет порядок байтов короткого (16-разрядного целого числа со знаком) в C #.
Однако приведенный выше код не будет компилироваться, потому что C # неявно преобразует короткие значения в int в обеих следующих строках:
Первый случай:
short test1 = ((value >> 8) & 0xFF);
Второй случай:
return (test1 | test2);
Почему происходит это преобразование? Смогу ли я добиться ожидаемого результата, просто вернувшись к короткой позиции? Примерно так:
short BitwiseTest2(short value)
{
short test1 = (short)((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return ((short)(test1 | test2));
}
Если нет, то почему?
Обратите внимание, что я понимаю, почему C # преобразует краткое значение в целое число при выполнении сдвига влево, отсюда и присвоение переменной test2.