我们通常会遇到一些有符号数与无符号数进行算术运算的问题,往往我们对运算的结果的符号取舍却不甚了解。现在,我们就通过一两个简单的程序,来认清在做这类运算时的具体细节。
比如:
int a = -8;
unsigned int b = 6;
printf("%d.....", (a+b));
结果是-2,
unsigned int a = 8;
int b = -6;
printf("%d.....", (a+b));
结果为2.
看上去,就是简单的加减操作。没有什么难度。这是两者位宽相同的情况,那么如果位宽不同呢,
char a = -8;
unsigned int b = 6;
printf("%d.....", (a+b));
结果为-2.
同理,
unsigned char a = 8;
int b = -6;
printf("%d.....", (a+b));
结果为2.
从中,我们可以看到,同位宽的数相加减,输出结果只取决于%d还是%u,不同位宽的数相加减时,首先,低位宽的会上涨为同位宽的数,注意,上涨为同位宽的有符号还是无符号取决于其本身的符号,这跟与它进行算术运算的高位宽数的有无符号无关。