为什么数据在内存里是以补码的形式存储?正数好理解,就是其本身。负数为何不能直接第一位1表示负,其后

2024-11-25 00:58:29
推荐回答(4个)
回答1:

补吗是为了加减运算才出现的。。。我们都知道如果加一个负数,只要减去他对应的正数即可,
如 3+(-1)=3-1=2
计算机很笨,没这种思维,他加法就是加法
3+(-3) 如果按你的方法表示负数 结果时 0x03+0x83=0x86 显然不是0,因为计算机不会把加法变成减法。。。
那另一种就是取补吗,0x03+0xfd=0x00 这样就符合运算规则,这就是为什么要有补吗,-1 必须要比-2 在代码上大1,
如果只是把首位变成1 ,那仍然不符合这个规则,0x01 0x02如果只是首位变符号,结论是 0x81 小于 0x82 这就是一个错误 -1<-2 不符合逻辑。。。CPU只是个机器,没有智商可言。。。。
计算机对数字的处理 抛开符号位 00000000必须是最小的数,显然拿单字节来说 -128应该全0, 带上符号那么就是1000000是自小的数就是-128。。。。 -1+1应该为0 那么 ff+1=0 所以ff就是-1。。。。

回答2:

c的char数据属于基本类型,基本类型其中还包括-整型,实型,枚举类型!

数据在内存中是以二进制形式存放的。数值是以补码表示的。

整型:
一个正数的补码和其原码的形式相同。而负数的补码方式是将其绝对值的二进制形式“按位求反再加1”

实型:
在内存中占4个字节,是按照指数形式存储的,实型数据分为小数部分和指数部分,分别存放!计算机用二进制表示小数部分,用2的幂次来表示指数部分!

字符型:
在内存中字符的存储实际上是把字符相对应的ASCII代码放到存储单元中的。而这些ASCII代码值在计算机中也是以二进制形式存放的。这个与整型的存储很相似。因此这两类之间的转换也比较方便!

回答3:

为什么数据在内存里是以补码的形式存储??

这个问题,很重要,其实,答案却很简单。

计算机,每次进行计算,位数,是固定的。

八位的计算机,每次计算,就只有八位二进制数。

16 位机、32 位机、64 位机 ...,也都是雷同的。

那么:

数值  0,八位机存的就是:0000 0000,这没有疑问吧?

数值 +1,就是 0+1。即:0000 0001,你可以理解吧?

数值-1,那显然就是 0-1 了。

你用二进制算算看,差,是多少?

忽略借位,差,就是:1111 1111 (十进制 255)。

这个正数,就被称为:-1 的补码。

数值-X,怎么存放?

那就按照 0-X 算呗! 也可以得出这种八位的结果。

这就是负数(-X) 的补码。

---------------------

补码,是一个正数。(如:-1 的补码就是 255。)

补码,是一个“代替负数计算”的正数。

这说法,对吗?

你可以验算一下。

比如,等式:-1 + 1 = 0,是必须成立的。

转换为补码:[-1]补 + [+1]补 = [0]补,也应该成立。

代入数值,计算如下:

 1111 1111 + 0000 0001 = (1) 0000 0000

你舍弃进位,等式就成立了。

这说明:

  用补码(正数),就可以代替负数。

  同时,加法,也就代替了减法运算。

用补码计算,与普通二进制的算法相同,逢二进一。

  但是,进位,必须舍弃。

---------------------

你的问题是:为什么数据在内存里是以补码的形式存储?

正确答案是:简化算法,从而简化硬件。

 这也就是:补码存在的意义。

补码的理论,就是这么简单。

老外算术不行,才编造了“原码反码取反加一符号位不变”。

我们的计算机老师脑子不好用,被老外骗得滴溜滴溜转。

跟着老外绕了老大一圈,也讲不明白“补码的存在意义”。

学生学完了,也不知道:为什么数据在内存里是以补码的形式存储?

回答4:

方便cpu计算,因为正数和负数的补码相加之后刚好等于0,其他的码好像不行,隐约记得好像是这个原因...