Chữ số trong C# là int
, không phải byte
(và thay đổi bit sẽ được trình biên dịch đánh giá, do đó chỉ còn lại 510). Do đó, bạn đang cố gán giá trị cho một số byte
không phù hợp. Bạn có thể che mặt bằng 255:
byte b = (255 << 1) & 0xFF
để giảm kết quả thành 8 bit một lần nữa. Không giống như Java, C# không cho phép tràn đi bằng cách không bị phát hiện. Về cơ bản bạn có hai lựa chọn hợp lý khi cố gắng gán 510 cho một byte: Hoặc là kẹp ở giá trị lớn nhất, sau đó bạn nhận 255, hoặc vứt bỏ các bit không vừa, trong trường hợp này bạn sẽ nhận được 254.
bạn cũng có thể sử dụng unchecked
, như lassevk mentioned:
byte b = unchecked((byte)(255 << 1));
Không chắc chắn lý do tại sao tôi nghĩ 255 sẽ được lưu trữ dưới dạng 8 bit –
Vâng, 255 phù hợp, mọi thứ ở trên đều không :) – Joey
Cần lưu ý, vì tôi đã được đẩy ở đây từ một chuỗi khác, ngay cả khi bạn có hai byte, bất kỳ hoạt động bitwise trên chúng sẽ trả về một int. –