有符号数和无符号数之间的转换
时间:2010-03-27 来源:allen_yue
如何转换int和unsign int???
char foo(void)
{
unsigned int a = 6;
int b = -20;
char c;
(a + b > 6) ? (c = 1) : (c = 0);
return c;
}
a+b的值不是-14,而是一个unsigned int类型的数4294967382,这个数字是如何来的?
(a + b > 6) ? (c = 1) : (c = 0); //这个地方 要有一个隐藏的类型转换 也就是int b转换成unsigned int类型 因为做运算的时候 要精度相同 避免丢失数据 因为是无符号的 自然就a+b>6了 所以选择C=1 至于怎么转换,其实很简单,int和unsigned int相比,只是符号位的区别,将以前表示符号的符号位看成是表示数值的就行!
比如:
对于4294967382
二进制是:
100000000000000000000000001010110
把第一位看做符号位,是负号,后面那一串,就是14
所以是-14
{
unsigned int a = 6;
int b = -20;
char c;
(a + b > 6) ? (c = 1) : (c = 0);
return c;
}
a+b的值不是-14,而是一个unsigned int类型的数4294967382,这个数字是如何来的?
(a + b > 6) ? (c = 1) : (c = 0); //这个地方 要有一个隐藏的类型转换 也就是int b转换成unsigned int类型 因为做运算的时候 要精度相同 避免丢失数据 因为是无符号的 自然就a+b>6了 所以选择C=1 至于怎么转换,其实很简单,int和unsigned int相比,只是符号位的区别,将以前表示符号的符号位看成是表示数值的就行!
比如:
对于4294967382
二进制是:
100000000000000000000000001010110
把第一位看做符号位,是负号,后面那一串,就是14
所以是-14
相关阅读 更多 +