Tôi đã đoạn mã sau C#:C# số hằng
byte rule = 0;
...
rule = rule | 0x80;
trong đó sản xuất các lỗi:
Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?)
[Cập nhật: Phiên bản đầu tiên của câu hỏi đã sai ... tôi không nhận định sản lượng biên dịch ]
Thêm các diễn viên không sửa chữa các vấn đề:
rule = rule | (byte) 0x80;
tôi cần phải viết nó như:
rule |= 0x80;
Mà chỉ cần có vẻ lạ. Tại sao toán tử |=
khác với toán tử |
?
Có cách nào khác để yêu cầu trình biên dịch xử lý hằng số dưới dạng byte không?
@ Giovanni Galbo: có và không. Mã này đang xử lý lập trình của bộ nhớ flash trong một thiết bị bên ngoài và biểu diễn logic một byte bộ nhớ. Tôi có thể bỏ nó sau, nhưng điều này dường như rõ ràng hơn. Tôi đoán di sản C của tôi đang hiển thị quá nhiều!
@ Jonathon Hà Lan: 'là' cú pháp trông gọn gàng nhưng tiếc là không xuất hiện để làm việc ... nó tạo ra:
The as operator must be used with a reference type or nullable type ('byte' is a non-nullable value type)
Như bạn nói, tất cả int là int32, không phải là đặc tả ngôn ngữ (hoặc CLR) thực hiện bảo đảm này? – Eloff
int là một bí danh C# cho Int32 và chắc chắn không giống như một byte. Trình biên dịch JIT là nền tảng nhận thức nên chúng ta không cần phải như vậy. Kích thước từ gốc, địa chỉ và hiệu quả của các hoạt động chống lại các nguyên thủy gốc khác nhau có nhiều khả năng được tham gia vào cách phân bổ dữ liệu được quản lý (bao gồm cả "nguyên thủy") trong hệ thống cơ bản.Hãy xem xét rằng cùng một mã có thể được biên dịch cho .NET Micro cũng như .NET CF (nhắm mục tiêu ARM cho điện thoại và PowerPC cho XBox 360). Các hệ thống này thậm chí có thể thể hiện số của chúng với độ tin cậy khác nhau có ảnh hưởng lớn đến hoạt động nhị phân. – TheXenocide