当前位置:首页 > 内存 > 正文

负数在内存中按字方式怎样存储

  • 内存
  • 2024-06-01 14:18:35
  • 2668

一、关于字符和整数在计算机内存中的存储格式事实上,一切都以二进制形式存储在内存中。不可能将ASCII直接存储到内存中。您必须先将其转换为二进制ASCII形式,然后保存。


二、C语言中负数在内存中为什么要以补码形式存储?c的char数据属于基类型,其中还包括整型、实型、枚举类型!
数据以二进制格式存储在内存中。值以二进制补码格式表示。
整数类型:
正数的补码等于其原码。负数补码方法是“将绝对值的二进制形式按位取反并加1”
实数类型:
在内存中占用4个字节,以指数形式存储,分为部分小数和指数部分,单独存储!计算机用二进制来表示小数部分,用2的幂来表示指数部分!
字符类型:
在内存中存储字符实际上是将字符对应的ASCII码插入到存储单元中。这些ASCII码值也以二进制形式存储在计算机中。这与记忆整数非常相似。因此,这两个类别之间的转换也更加方便!


三、计算机中的负数以何种形式存在呢?

比如-9的补码是11110111。

9的源码是00001001,如果是负数,则补码最高位为1,余数取反,即11110110然后在最低位加1,得到11110111。

计算机中的负数以补码形式存在,补码=原码的反转+1。

Abyte有8位,可以表示-128到+127之间的值。二进制表示为10000000-01111111(注:最高位代表符号)。最高位为1的都是负数,最高位为0的都是正数。

扩展信息:

补码乘法

补码乘法无补码[X*Y]=[X]补码×[Y]补集属性。然而,补码[X*Y]==补码[X][011*011]=-01001=10111。

其中,若[Y]补=y31y30...y0,则Y=-y31*2^31+y30*2^30+...+y0*2^0

原代码表示在数值前面加了一个符号位(即最高位为符号位):该位为0表示正数,1表示负数(0有两种表示:+0和-0)其余位表示数值的大小。