2008-11-26 38 views
9

Đây là follow up question.C#, ký hiệu thập lục phân và số nguyên đã ký

Vì vậy, số nguyên Java cửa hàng trong two's-complements và bạn có thể làm như sau:

int ALPHA_MASK = 0xff000000; 

Trong C# này đòi hỏi việc sử dụng một số nguyên unsigned, uint, bởi vì nó diễn giải điều này là 4278190080 thay vì -16.777.216.

Câu hỏi của tôi, cách khai báo giá trị âm trong ký hiệu thập lục phân trong C# và cách chính xác là số nguyên được biểu thị nội bộ? Sự khác biệt với Java ở đây là gì?

Trả lời

22

C# (thay vì, .NET) cũng sử dụng phần bổ sung của hai, nhưng nó hỗ trợ cả các loại đã ký và chưa ký (Java không có). Một mặt nạ bit là tự nhiên hơn một điều unsigned - tại sao nên một chút khác với tất cả các bit khác?

Trong trường hợp cụ thể này, nó là an toàn để sử dụng một dàn diễn viên không được kiểm soát:

int ALPHA_MASK = không được kiểm soát ((int) 0xFF000000);

Chỉnh sửa (thêm):

Để "trực tiếp" đại diện cho con số này như một giá trị ký, bạn viết

int ALPHA_MASK = -0x1000000; // == -16777216

Hệ thập lục phân không phải là (hoặc không được) khác với số thập phân: để biểu thị số âm, bạn cần viết dấu âm, sau đó là các chữ số đại diện cho giá trị tuyệt đối.

5

Vâng, bạn có thể sử dụng một khối không được kiểm soát và một dàn diễn viên:

unchecked 
{ 
    int ALPHA_MASK = (int)0xff000000; 
} 

hoặc

int ALPHA_MASK = unchecked((int)0xff000000); 

Không khủng khiếp thuận lợi, mặc dù ... có lẽ chỉ cần sử dụng một số nguyên theo nghĩa đen?

+0

Tôi không biết C# có từ khóa này. Mát mẻ! –

0

Và chỉ để thêm sự xúc phạm đến chấn thương, điều này sẽ làm việc quá:

-0x7F000000

Các vấn đề liên quan