版权声明:私藏源代码是违反人性的罪恶行为!博客转载无需告知,学无止境。 https://blog.csdn.net/qq_41822235/article/details/83349128
记住两句话:
- 位宽相等,不改变数据在内存中的存储形式;
- 位宽不等,基准是int类型;原始类型是unsigned,填充零;signed,填充符号位。
请看例子:
例子1
signed char a = 0xe0; //第一行
unsigned int b = a; //第二行
unsigned char c = a; //第三行
a == c; //第四行
第二行位宽不等,对a需要进行符号位填充,故而b在内存中的表现形式是0xffff ffe0。
第三行位宽相等,故而不考虑扩展,变量c在内存中的表现形式仍为0xe0。
第四行位宽不相等,而且位宽都没有达到int,故而a填充成0xffff ffe0,c填充成0x 0000 00e0,逻辑值为false。
例子2
signed int a = 0x e000 0000; //第一行
unsigned int b = a; //第二行
b == a; //第三行
位宽相等,a转成无符号的再同b去比较,结果为真。