2011-01-19 1 views
6
short BitwiseTest(short value) 
{ 
    short test1 = ((value >> 8) & 0xFF); 
    short test2 = unchecked((short)((value << 8) & 0xFF00)); 
    return (test1 | test2); 
} 

Вышеприведенный код должен быть (неэффективным) примером, который сводит континент короткого (подписанного 16-битного целого) в C#.C# Побитовые операции на шортах - зачем бросать в int?

Однако приведенный выше код не будет компилироваться, так как C# неявно литьем из короткого к междунар на обоих из следующих строк:

Первый случай:

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.

+0

Я не голосовал, чтобы закрыть как дубликат, но это значительно похоже на http://stackoverflow.com/questions/941584 –

+0

Может быть, я должен объяснить, почему я не нахожу ответы к существующим вопросам о дополнении. С добавлением есть возможность переполнения, так же как и с назначением test2. Я понимаю эти обстоятельства. Однако в двух ситуациях, которые я изложил, нет возможности переполнения. –

ответ

0

Ответ на этот вопрос отвечает в другом ответе (даже если вопрос совсем другой) самого Эрика Липперта.

Посмотрите Integer summing blues, short += short problem

+0

Этот вопрос даже не удаленно, и не был отмечен ответ. –

+1

@Benjamin: Только для справки, тот факт, что первоначальный искатель не решил принять ответ, не означает, что он не получил ответа. Многие люди просто никогда не подходят к этому, или понимают, что они должны. Обычно вы можете больше узнать о качестве конкретного ответа по количеству голосов, полученных от сообщества, а не по тому, принято оно или нет. –

+1

Важная часть этого ответа заключается в том, что он говорит обо всех коротких операциях, заканчивающихся как int. Как я уже сказал, вопрос другой, но ответ будет в основном тем же. Этот короткий short равен int. –

Смежные вопросы