Понять оператор сдвига

Чтобы немного расширить ответ visual-c# Марка (Марк, не стесняйтесь .cs-file включать это в свой, и я c# удалю этот ответ), это указано .cs-file в разделе 7.8 спецификации:


Стандартные visual-c# операторы сдвига перечислены c-sharp ниже.

Сдвиг влево:

  • int operator << (int x, int count);
  • оператор uint << (uint x, int count);
  • long operator << (long x, int count);
  • оператор ulong << (ulong x, int count);

Оператор csharp << сдвигает x влево на количество c# бит, вычисленное, как описано c#.net ниже.

Старшие биты вне диапазона c#.net типа результата x отбрасываются, оставшиеся csharp биты сдвигаются влево, а .cs-file позиции пустых битов младшего .cs-file разряда устанавливаются на .cs-file ноль.

Сдвиг вправо:

  • int operator >> (int x, int count);
  • оператор uint >> (uint x, int count);
  • long operator >> (long x, int count);
  • оператор ulong >> (ulong x, int count);

Оператор c-sharp >> сдвигает x вправо на количество c#-language бит, вычисленное, как описано c#.net ниже.

Когда x имеет тип int visual-c# или long, младшие биты x visual-c# отбрасываются, оставшиеся csharp биты сдвигаются вправо, а .cs-file позиции пустых битов высокого csharp порядка устанавливаются на csharp ноль, если x неотрицательно .cs-file и установлено на один, если c#-language x отрицательно.

Если x имеет c-sharp тип uint или ulong, младшие c#.net биты x отбрасываются, оставшиеся .cs-file биты сдвигаются вправо, а .cs-file позиции пустых битов высокого .cs-file порядка устанавливаются на c-sharp ноль.

Для предопределенных .cs-file операторов количество битов c# для сдвига вычисляется следующим c#-language образом:

Когда тип x - int csharp или uint, счетчик сдвига c-sharp задается младшими пятью битами csharp счетчика. Другими словами, количество .cs-file сдвигов вычисляется из count c# & 0x1F.

Если x имеет тип long c# или ulong, счет сдвига задается c#-language шестью младшими битами счетчика. Другими visual-c# словами, количество сдвигов visual-c# вычисляется из count & 0x3F.

Если c# результирующий счетчик сдвига visual-c# равен нулю, операторы сдвига c-sharp просто возвращают значение c#.net x.


c#

2022-03-16T13:04:08+00:00