【发布时间】:2020-09-18 04:03:36
【问题描述】:
#include <stdio.h>
int main()
{
int a = -2; // 0xFFFFFFFE
unsigned int b = 1; // 0x00000001
if ((int)a > (int)b) printf("(int)a > (int)b;\n");
else printf("(int)a < (int)b;\n");
if ((unsigned int)a > (unsigned int)b) printf("(unsigned int)a > (unsigned int)b;\n");
else printf("(unsigned int)a < (unsigned int)b;\n");
if (a > b) printf("a > b;\n");
else printf("a < b;\n");
char c = -2; // 0xFE
unsigned char d = 1; // 0x01
if ((char)c > (char)b) printf("(char)c > (char)d;\n");
else printf("(char)c < (char)d;\n");
if ((unsigned char)c > (unsigned char)d) printf("(unsigned char)c > (unsigned char)d;\n");
else printf("(unsigned char)c < (unsigned char)d;\n");
if (c > d) printf("c > d;\n");
else printf("c < d;\n");
return 0;
}
run result is:
(int)a < (int)b;
(unsigned int)a > (unsigned int)b;
a > b;
(char)c < (char)d;
(unsigned char)c > (unsigned char)d;
c < d;
为什么是 a>b 和 c
【问题讨论】:
-
int a = -2; // 0xFFFFFFFE中的评论具有误导性。a可能具有 0xFFFFFFFE 的位模式,但它仍然具有 -2 的 值。如果int是 32、16、64 或 42 位,则它具有该值。如果用 2 的补码、1 的补码或符号幅度编码,则它具有该值。它没有 0xFFFFFFFE (4,294,967,294) 的值。>取决于值,而不是位模式或编码。