C语言如何表示正负值问题

如有占16位的二进制数,它表示了一个从负到正的取值,负数以补码表示,我现在定义成什么型的变量可表示这有正有负的数?是不是int型?
我是怕表示的负数以补码算又得出另一个正数了,
比如16位的二进制数中1111111111110110,既表示-10也表示65526,写程序时如何区别开正负?
我用win TC试了下,为什么不管定义成int还是unsigned 型,64656都输出的是-800,为什么unsigned 型不输出64656??
如图https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/85066767/pic/item/a7fa080f696bfb8f7acbe1d3.jpg

  c语言有两种数据类型,一种是整型,一种是浮点型 ,整型类型一般用的原码表示,浮点类型一般用的IEEE754标准进行编码。

  整型数中原码表示正负数,取最高位为符号位,以8位二进制数来表示1和-1。1的二进制为
  0 000 0001 //最高位为符号位,0表示正数,1表示负数
  1 000 0001 //这个表示-1

  IEEE754浮点数编码,使用的格式类似于 (-1)^s * M* 2^E,其中s是符号位,M是有效位数,E指的是指数,s符号位占1位,如果是0,则(-1)的0次方为1,表示是一个正数,如果s位是-1,则表示是一个负数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-04
正如你所说,1111111111110110,如果是int型,表示-10,如果是unsigned int型,则是65526。

C语言内部,会根据数据类型对数值时行处理,short,int, long,double, float等是有正有负的,而unsigned 类型的都是没有符号的,就是没有负数。

其它的类型(如DWORD)都是typedef过后的,可以根据定义找到原来的类型。本回答被提问者采纳
第2个回答  2010-09-02
定义成有符号数,16位最好定义成长整型数。

最高位为符号位,通过判断最高位来判断正数还是负数

补充回答:

定义成:unsigned long a;
第3个回答  2010-08-31
int是有符号的,unsigned是无符号的,你若定义a是int型,它就是-10,你若定义a是unsigned型,它就是65526。对于-10和65526,在内存中都是一样的,要分清它是-10还是65526,就得看你是定义的a是int型还是unsigned型。
第4个回答  2010-09-01
通过定义变量类型来确定,如int 为-32768——32767
unsigned int 则为0——65535;
相似回答