Tôi đã tìm kiếm trang này để tìm câu trả lời và tìm thấy nhiều câu trả lời cho so sánh chưa ký/đã ký nhưng vấn đề này chỉ là các thông số chưa được so sánh nhưng vẫn hoạt động được.unsigned sẽ được ký kết trong các so sánh if-statement?
Sự cố với mã sau đây là số if
đầu tiên không xảy ra ("xin chào") trong trường hợp thứ hai ("thế giới") thực hiện. Điều này tôi đã giải thích khi tính toán được thực hiện bên trong các if
-statment tạo ra một số âm nhưng tính toán chính xác tương tự được thực hiện với kết quả được lưu vào một biến không (mặc dù kết quả đang được lưu vào một biến ký).
Trình biên dịch được sử dụng là gcc 4.4.
unsigned short u16_varHigh;
unsigned short u16_varLow;
unsigned short u16_Res1;
signed short s16_Res1;
u16_varHigh = 0xFFFF;
u16_varLow = 10;
u16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected
s16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected
// Does not enter
if((u16_varLow - u16_varHigh) > (unsigned short)5)
{
printf("hello");
}
// Does enter
if((unsigned short)(u16_varLow - u16_varHigh) > 5)
{
printf("world");
}
Bất cứ ai có thể giải thích điều này cho tôi và có thể đưa ra giải pháp để sửa chữa sao cho hoạt động đầu tiên của if
cũng có hiệu quả không?
thể trùng lặp của (http [Câu hỏi về quy tắc khuyến mãi không thể thiếu C.]: // stackoverflow .com/questions/2280663/question-about-c-integral-promotion-rules) – unwind
Tôi không đồng ý. Về chủ đề tương tự, nhưng không trùng lặp. – Kos