首先先说明下:
1)数值在计算机中是以补码的形式存储的。同时如果两个补码相加时,最高位也就是我们的符号位如果有进位,是需要丢弃的。正数的补码是自己本身,
负数的补码是符号位为1,其余位为该数绝对值的原码按位取反,然后整个数再加1.
2)如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较高类型,然后再参加运算,转换规则如下图所示。
double ←── float 高
↑
long
↑
unsigned
↑
int ←── char,short 低
ok现在开始看几个例子:
例1:
int a=6;
unsigned int b=-20;
unsigned int c = a+b;
c是多少?
a:0x00 00 00 06
b:0xff ff ff ec (0x00 00 00 14->取反0x ff ff ff eb->加1 0x ff ff ff ec)
c 的值为:0x ff ff ff f2
例2:
int a = -6;
unsigned int b = 20;
unsigned int c = a+b;
c是多少
a: 0x ff ff ff fA
b:0x 00 00 00 14
c=0x00 00 00 0e;