cuốn sách gpt4 ai đã làm

Biên dịch trong bối cảnh được kiểm tra và không được kiểm tra

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 18:31:24 27 4
mua khóa gpt4 Nike

j Giá trị của là gì?

Int32 i = Int32.MinValue;
Int32 j = -i;

Biên dịch trong ngữ cảnh được kiểm tra sẽ đưa ra một ngoại lệ.
Không cần kiểm tra, chúng tôi nhận được giá trị Int32.MinValue.

Nhưng tại sao lại như vậy?

câu trả lời hay nhất

Dưới đây là các giá trị Int32 tối thiểu và tối đa:

                   Dec Bin (bit đầu tiên là bit dấu)
Int32.MinValue -2147483648 10000000000000000000000000000000000
Int32.MaxValue 2147483647 01111111111111111111111111111111

Khi bạn cố gắng vượt qua kiểm tra tràn rõ ràng -(-2147483648) , trong trường hợp đó bạn sẽ gặp phải một ngoại lệ vì 2147483648 Lớn hơn giá trị tối đa được phép của loại int.

Vậy tại sao bạn nhận được MinValue khi cho phép tràn? Bởi vì khi Int32.MinValue bị phủ định bạn có 2147483648 nó có biểu diễn nhị phân 10000000000000000000000000000000 Nhưng bit đầu tiên của số nguyên có dấu là bit dấu, do đó bạn nhận được giá trị Int32.Min chính xác.

Vì vậy, vấn đề ở đây là sử dụng bit đầu tiên làm ký hiệu số. Nếu bạn gán kết quả của giá trị Int32.Min bị phủ định cho một số nguyên không dấu, bạn sẽ nhận được kết quả như mong đợi 2147483648 giá trị:

Int32 i = Int32.MinValue;
UInt32 j = (UInt32)-i; // nó có 32 bit và không coi bit đầu tiên là dấu

Về c# - biên dịch trong ngữ cảnh được kiểm tra và không được kiểm tra, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/21725081/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress