Просто расширить ответ Марка, немного (Марк, не стесняйтесь, чтобы включить это в ваших, и я удалю этот ответ) это указано в разделе 7.8 спецификации:
предопределенные операторы сдвига перечислены ниже.
Сдвиг влево:
- INT оператор < < (целое х, INT счетчик);
- Оператор uint < < (uint x, int count);
- длинный оператор < < (long x, int count);
- ulong operator < < (ulong x, int count);
< < Оператор смещает x слева на количество бит, вычисленное, как описано ниже.
Высшие разряды вне диапазона результата результата x отбрасываются, остальные бит сдвигаются влево, а разряды пустых разрядов младшего разряда устанавливаются на ноль.
сдвиг вправо:
- ИНТ оператор >> (целое х, число целое);
- uint operator >> (uint x, int count);
- длинный оператор >> (long x, int count);
- ulong operator >> (ulong x, int count);
Оператор >> сдвигает x справа на несколько бит, вычисленных, как описано ниже.
Когда x имеет тип int или long, младшие биты x отбрасываются, остальные бит сдвигаются вправо, а старшие разряды старшего разряда устанавливаются на ноль, если x неотрицательно и задано к одному, если х отрицательно.
Когда x имеет тип uint или ulong, младшие биты x отбрасываются, остальные биты сдвигаются вправо, а стартовые разряды старшего разряда устанавливаются на ноль.
Для предопределенных операторов, количество бит для сдвига вычисляется следующим образом:
Если типа х является INT или UINT, величина сдвига задается низким порядком пяти бит счетчика. Другими словами, подсчет сдвига вычисляется из числа & 0x1F.
Когда тип x длинный или улунгов, счетчик сдвига задается шестью битками младшего порядка. Другими словами, подсчет сдвига вычисляется из числа & 0x3F.
Если итоговое значение сдвига равно нулю, операторы сдвига просто возвращают значение x.
Привет, могу я попросить вас объяснить это больше? В первом случае, почему у меня есть 0x200000000, а во втором - почему у меня 16000? Большое спасибо –
Это как сказать «почему 1 * 50000 отличается от 1000 * 8» - потому что вы делаете совсем другие вещи. Первая - 2^33 («мощность»), вторая - 1000 * 16. –
хорошо, я понимаю разницу между 2^33 и 1000 * 16 я хочу знать, почему 2^32 –