① c语言中用unsigned表示负数
刚才在TC2.0里测试了这个程序,发现的确如楼主所说,看来是TC的问题,它在打印的时候似乎没有理会C的类型。而在GCC下结果是c=65523
所以是什么类型无所谓,只是溢出以及printf解析时有区别。65523按负数解析实际就是 -13
///一下引自CSDN
数值在内存中存储时只是一串二进制数字,没有正与负之分的,所谓的正与负是看如何去解释这个二进制串,你在输出的时候按照%d的方式输出,就是告诉printf函数,输出这个数字的时候解释成int类型,你定义的变量的类型是给编译器看的,而变量本身只是一个四个字节的内存空间,你想让它后来解释成什么类型就解释成什么类型。你可以将c程序编译成asm程序看看,就知道,int i;和unsigned int i;之间的差别了
② 关于C语言的正负符号存储~
你的理解是对的。
最高位为1时,对于有符号来说,这个数是负数,而对于无符号数而言,由于最高位也是有效存储位,所以可以存储更大范围的数。
话再说回来,既然是无符号数,输出格式应该是"%u",而不是"%d",这样才能做到“表里如一”,“改头换面”只会乱了自己,这不是游戏,严谨是必须的。
③ c语言初学者求解关于负数补码存储
出去晒晒太阳吧,原理明白了就好,没必要钻牛角尖。
计算机存储都是二进制,八进制和十六进制亦或十进制都是用来输入输出表示的,如果你的程序用来编辑或显示内存实际数据,一般用十六进制显示,因为十六进制相对二进制简短而且1位16进制对应4位二进制,非常整齐,为了方便。如果你的程序用来计算一般应用,则以10进制显示,同样为了方便,特殊要求可以用其他任意进制显示,根据你需求哪个方便用哪个。
编程语言中,如果定义为整数(int),计算机遇到负数就以补码表示,此时0xffff即为-1;如果定义为uint,则不允许赋值负数(强制转换除外),如果其值为0xffff,则表示正的65535。所以关键在于定义(事先约定)。
而当你得到一个数据0xffff,如果不告诉你约定,或者说数据类型,你是无法知道到底表示-1还是65535的,计算机也如此。
④ C语言中无符号型变量能不能存放负数
可以赋一个负数值给无符号型变量,但是无符号变量将会把这个负数的符号位也纳入计算范围,从而在使用时返回一个正数。
⑤ 为什么c语言负数是以补码形式存放的
以-1和+1相加为例子。
一个字节,如果是负数,它是255,如果是正数,它是
-1。
255+1
=
256(1,0000,0000)
-1+1
=
0(0,0000,0000)
因为加到256后并不会真的进位,而是把op置位。所以整负数相加的问题很多地方都可以不去理会了。不用真正去区分正负了,只要依据最后需要的类型去处理结果就可以。
⑥ C语言中 负数在内存中为什么要以补码形式存储
没有为什么这就是规定 知道吗
你能高速我1+1为什么等于2吗
⑦ C语言正负数的存储形式
正数以源码形式存储,负数以补码形式储存,计算机组成原理有讲解的,你所说的十六进制和八进制,有正、负数之分!
⑧ C语言中负数在内存中为什么要以补码形式存储
c的char数据属于基本类型,基本类型其中还包括-整型,实型,枚举类型! 数据在内存中是以二进制形式存放的。数值是以补码表示的。 整型:一个正数的补码和其原码的形式相同。而负数的补码方式是将其绝对值的二进制形式“按位求反再加1”实型:在内存中占4个字节,是按照指数形式存储的,实型数据分为小数部分和指数部分,分别存放!计算机用二进制表示小数部分,用2的幂次来表示指数部分!字符型:在内存中字符的存储实际上是把字符相对应的ASCII代码放到存储单元中的。而这些ASCII代码值在计算机中也是以二进制形式存放的。这个与整型的存储很相似。因此这两类之间的转换也比较方便!
⑨ c语言中负数是按补码存储,怎么读出来哪
本质是,都是二进制数,或者是十六进制数。
举个例子:
-1,在16位CPU中,用补码表示,则为1111 1111 1111 1111,或者0xFFFF。
在C语言中,如果定义为无符号数,则0xFFFF读出来就是65535,
如果定义为有符号数,则0xFFFF读出来就是-1。
同样的二进制数,类型不同,解释出来的结果也不同。
⑩ 关于C语言负数的存储问题。
首先要理解这个范围怎么来的
因为 char 和 unsigned char 是1个字节,一个字节=8个位,即1byte=8bit,计算机能用8个位表示的最大值就是1111 1111,即255,这是uchar 的,char型数据第8位是正负数的,所so char (-128 ~+127) 即 (正负)111 1111 ,超出范围的赋值,就不确定它会被计算机理解成什么了,你可以写个测试代码看一下