short BitwiseTest(short value)
{
short test1 = ((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return (test1 | test2);
}
Предполагается, что приведенный выше код является (неэффективным) примером, который меняет порядковый номер короткого (16-разрядное целое число со знаком) в C #.
Однако приведенный выше код не будет компилироваться, потому что C # неявно преобразует значение short в 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.