不同类型数据运算的总结
前几天在学习交流群里,有个小伙伴问了一个问题,是关于有符号整数和无符号字符数的运算的问题。对于这部分,我个人理解的也有点问题,现在来做个总结回顾。 有符号整型和无符号数整型 举例 #include <stdio.h> #include <stdlib.h> int main() { int a = -1; unsigned int b = 1; printf("%d", a > b); return 0; } 输出结果为:1 解析 无符号整型和有符号整型比较时,有符号整型会转化成无符号整型。因此,-1转化为无符号数为0xFFFFFFFF,所以a>b,输出1。 有符号字符型和无符号字符型 举例 #include <stdio.h> #include <stdlib.h> int main() { char a = -1; unsigned char b = 1; printf("%d", a > b); return 0; } 输出结果:0 解析 要解释以上这个现象,首先要明白整型提升: 整型提升 是C程序设计语言中的一项规定:在表达式计算时,各种整形首先要 提升为int类型 ,如果int类型不足以表示 则要提升为unsigned int类型 ;然后执行表达式的运算。 整型提升的意义在于:表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器