究竟C语言中的signed与unsigned有什么用

#include<stdio.h>
int main(void)
{
signed int signedNum;
unsigned int unsignedNum;

signedNum=4294967295;
unsignedNum=4294967295;
printf("%d\n", signedNum);
printf("%u\n", signedNum);
printf("%d\n", unsignedNum);
printf("%u\n", unsignedNum);
return 0;
}
运行上面的程序(GCC编译),发现输出signedNum与unsignedNum结果是一样的,请问各位大神用unsigned修饰char, int, long有什么用呢?signed 与 unsigned有什么不同呢?

你既然知道用4294967295来试验,那么基础的什么数值范围的,我就不说了。

之所以输出结果都是-1 \n 4294967295,是因为两个变量实际保存的内容是一样的,这个没有区别。而输出格式%d决定了实际显示。
但在参与运算的时候,就完全不同了。追问

参与什么运算呢?跪求例子。另外,既然“两个变量实际保存的内容是一样的”, 也就是在内存中他们是相同的二进制码,那么我还有必要用unsigned来修饰吗?C语言为什么还要保留unsigned 与signed呢?当然,其实我还是觉得unsigned 在c++中是有用的,因为如果用cout输出,要知道数据类型的。但是在C中,只要我用printf且正确选定%d还是%u,那么不管它是int 还是 unsigned int,我都可以得到正确的结果。

追答

“选定%d还是%u,那么不管它是int 还是 unsigned int,我都可以得到正确的结果”
这说法没错。
这是C/C++的灵活性和容错能力。
但实际上,你的数字不是只有printf一种用途啊,比如在你绑定控件等功能的时候,它可没有给你格式化的功能,是按照你实际定义的类型来显示的。

而且,在程序阅读上,
你int i = 4294967295;看着舒服吗,容易理解吗?
int i=-1一目了然。

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-28
你要是有负数结果就不一样, unsigned就是说只有正数,没有负数
第2个回答  2013-02-28
数值范围不同, 你换成负数试试. unsigned是无符号的 16字节 signed是有符号的8字节, 记错请指正
第3个回答  2013-02-28
一般用来定义整型变量(int或long)
signed 表示是有符号数
unsigned表示无符号数,最高位是符号位

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网