Числовые литералы в C #: int
, а не byte
(и сдвиг битов будет оцениваться компилятором, следовательно, останется только 510). Поэтому вы пытаетесь присвоить значение byte
, которое не подходит. Вы можете замаскировать с 255:
byte b = (255 << 1) & 0xFF
чтобы снова уменьшить результат до 8 бит. В отличие от Java, C # не допускает, чтобы переполнения проходили незамеченными. По сути, у вас было бы две разумные опции при попытке назначить 510 байту: либо зафиксировать максимальное значение, затем вы получите 255, либо выбросить не подходящие биты, и в этом случае вы получите 254.
Вы также можете использовать unchecked
, так как lassevk упоминается :
byte b = unchecked((byte)(255 << 1));