C语言中用unsigned表示负数

来源:百度知道 编辑:UC知道 时间:2024/09/23 11:00:45
程序:
#include <stdio.h>
void main()
{
unsigned short int a,c;
int b;
a=10;b=-23;
c=a+b;
printf("c=%d\n",n);
}
程序运行之后的输出结果为-13,但是书上说unsigned int表示数的范围是0~65535,单输出结果为什么是负数呢?
但是我想输出的c并不是int啊。。。? 恩恩。。。手误了,最后printf括号里面的最右端是“c”,但这样遍的输出结果的确是-13,比较想不明白。。。请高手指点

刚才在TC2.0里测试了这个程序,发现的确如楼主所说,看来是TC的问题,它在打印的时候似乎没有理会C的类型。而在GCC下结果是c=65523
所以是什么类型无所谓,只是溢出以及printf解析时有区别。65523按负数解析实际就是 -13
///一下引自CSDN
数值在内存中存储时只是一串二进制数字,没有正与负之分的,所谓的正与负是看如何去解释这个二进制串,你在输出的时候按照%d的方式输出,就是告诉printf函数,输出这个数字的时候解释成int类型,你定义的变量的类型是给编译器看的,而变量本身只是一个四个字节的内存空间,你想让它后来解释成什么类型就解释成什么类型。你可以将c程序编译成asm程序看看,就知道,int i;和unsigned int i;之间的差别了

我很想知道你的n是哪里来的。。。

VC下编译如下程序,

#include "stdafx.h"
#include <stdio.h>
void main()
{
unsigned short int a,c;
int b;
a=10;b=-23;
c=a+b;
printf("c=%d\n",c);
}

结果C = 65523

printf("c=%d\n",n);//n没有定义,应该是输入时手误吧
如果是printf("c=%d\n",c);的话,输出是c=65523

不是-13啊,你什么编译器啊,要是你n不改成c的话编译时不通过的