signed int与usigned int转换(有符号变量与无符号变量)
- 数据存储方式
- 计算机中数据都是以二进制进行存储的 正数为原码形式,负数为二进制补码形式
- 假定以字长为两个字节的机器为例int a=7
-
signed int a=7 存储方式:0000 0000 0000 0111
-
signed int a=-7 存储方式: 1111 1111 1111 1001
-
unsigned int a=7 存储方式:0000 0000 0000 0111
- -1是最大的负整数,转换成正整数也是最大的
- 实例代码
-
1 #include <stdio.h> 2 3 char getChar (int x,int y) 4 { 5 char c; 6 unsigned int a = x; 7 8 (a+y > 10) ? (c = 1): (c = 2); 9 10 return c; 11 } 12 13 int main (void) 14 { 15 char c1 = getChar(7,4); 16 char c2 = getChar(7,-7); 17 char c3 = getChar(7,-8); 18 char c4 = getChar(-6,7); 19 20 printf("c1 = %d\n",c1); 21 printf("c2 = %d\n",c2); 22 printf("c3 = %d\n",c3); 23 printf("c4 = %d\n",c4); 24 25 return 0; 26 }
运行结果:c1=1,c2=2,c3=2,c4=1;
- 当表达式中同时存在有符号类型与无符号类型时,所有的操作数都将自动转换成无符号类型
- c3分析
- y将自动转换成无符号类型
- y=-7在计算机中的存储为1111 1111 1111 1001 a=7存储为0000 0000 0000 0111
- a+y=0000 0000 0000 0000 溢出 所以值为0
- c4分析
- y=-8存储为 1111 1111 1111 0111 a=7存储为0000 0000 0000 0111
- a+y=1111 1111 1111 1111 即最大的整数 肯定大于10 所以c4=1;
- c3分析
-