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;

C语言如何表示正负值问题
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,则表示是一个负数。

C语言中的负数怎么表达?
1、C\/C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数,而1则表示一个十进制,0xff,0xFF,0X102A,等等.其中的x不用区分大小写。C\/C++中,10进制数有正负之分。比如12表示正12,而-12表示负12。但8进制和16进制只能表达无符号的正整数,如果在代码中写-0xF2,C\/C++并不把它当成一...

C语言中的正负数及其输出
在C语言的世界里,数字有正负之分,这适用于short、int、long等类型。默认情况下,这些类型被视为有符号,其中最高位用于表示正负,如int的32位内存中,前31位用于数值,最后一位表示符号,0代表正,1代表负。例如,-10和+16在内存中的表现截然不同。在编程时,我们通常从0开始计数,与日常习惯有所...

“a是一个带小数的的正数,b是一个带小数的负数”用c语言怎么描述
一,描述正负。可以直接用判断语句,利用数学性质,与0比较。if(a>0)代表该数为正数。if(b<0)代表该数为负数。二、判断是否有小数。在C语言中把float类型强制转换为int型,会只保留整数部分的值。利用这一点,可以通过表达式 a-(int)a来得到浮点数a的小数部分值,然后与0比较即可判断小数部分是否...

C语言如何实现正负交替
标记法 flag默认为1 flag = -flag;if(flag==1) 正数 else 负数 判断循环i值法:for(i=1;i<=n;i++)if(i%2==1) 正数 else 负数

C语言区分int数据正负的问题
类型是对一串二进制位的解释,这16bit有两种解释,有符号整数,有无符号整数。按有符号数来解释,最高位是符号位,1表示负数,其值为-20840。按无符号数来解释,值为44696。

一个c语言基础性问题、
如果是有符号数,则最高位为符号位,0表示正数,1则表示负数。正数用原码表示,负数则用补码表示(所谓补码是指将原码求反后加1所得)。对于1个字节,位的编号从低到高是0...7,即bit7是符号位,0...6位为数值。对于-1,原码是1,即0000001,求反后为1111110,再加1得1111111,添加符号位后为...

C语言大神谢谢。。。 1、计算机里怎么表示负数,为什么这样表示? 2...
1. C语言里,负整数的二进制形式最高位为 1,正整数的二进制形式最高位为 0。这是一种补码的表示形式,参考这里:http:\/\/baike.baidu.com\/view\/377340.htm 2. char 类型在32位机子上占用 1 个字节,也就是 8 位,由于最高位是符号位,所以最小的负数是 -2^7,也就是 -128。你知道如何...

c程序中 ~x^x 等于-1,为什么捏?
~取反,^是按位异或 设x=0x1234[0001 0010 0011 0100]则~X=[1110 1101 1100 1011]根据异或[0^1=1]结果1111 1111 1111 1111 上述结果就是补码中的-1,C语言表示正负数用的就是补码。具体补码,自己看看

C语言-逆序输出
C语言编程中,要实现逆序输出正整数或负整数,我们需要定义一个函数,通过三个变量来完成操作。其中,n表示原始数字,m用来存储个位数,y作为逆序数的容器。在函数定义部分,首先将y初始化为0,然后根据n的正负性,将n的绝对值赋给m。接着,通过while循环,当m不为0时,不断提取m的个位数(m%10)...

相似回答