C语言

您所在的位置:网站首页 c语言中内存是什么 C语言

C语言

2024-01-25 09:27| 来源: 网络整理| 查看: 265

计算机内存中的数字都是二进制表示的。 数字是怎么表示成计算机内存中的二进制的呢?

先说几个常识,以我正在使用的电脑为准(底层概念依赖硬件的实现,可能有差异):

目前我使用的intel电脑,是小端(主流现在都是小端),就是数字的低位也在内存的低位。 例: 1234 这个数字,4是低位(+1改变最小,1),1是高位(+1改变很大,1000),在内存中从地址低到高排列是:4321. 8 bits = 1byte = 1 char 占的空间。1 int 占了 4 bytes = 32 bits1 float 占了 4 bytes = 32 bits最高位表示符号,0正数,1负数。 1. 几个概念

原码 :最高位是符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。

反码:正数的反码与原码一致,负数的反码是对原码按位取反,只是最高位(符号位)不变。

补码:正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变。

(1). 原码

将一个整数转换成二进制形式,就是其原码。 例如short a = 6; a 的原码就是 0000 0000 0000 0110; 更改 a 的值a = -6; 此时 a 的原码就是 1000 0000 0000 0110。

通俗的理解,原码就是一个整数本来的二进制形式。

原码的缺点是:有2个0, 0…0 和 1…0,分别表示 +0和-0,相当于浪费了一个编码。

(2). 反码 对于正数,它的反码就是其原码(原码和反码相同);负数的反码是将原码中除符号位以外的所有位(数值位)取反,也就是 0 变成 1,1 变成 0。

例如short a = 6; a 的原码和反码都是 00000000 00000110; 更改 a 的值a = -6; 此时 a 的反码是 11111111 11111001。

反码的优势:这样-0就不存在了,原来的 1000…0 可以表示 -128了。

(3). 补码 对于正数,它的补码就是其原码(原码、反码、补码都相同);负数的补码是其反码加 1。

例如short a = 6; a 的原码、反码、补码都是 00000000 00000110; 更改 a 的值a = -6; 此时 a 的补码是 11111111 11111010。

可以认为,补码是在反码的基础上打了一个补丁,进行了一下修正,所以叫“补码”。

原码、反码、补码的概念只对负数有实际意义,对于正数,原码、反码、补码都是一样的。

补码的优势:取反码+1后,和正数的原码的和正好是0。相当于把 减法运算 简化为一个 加法运算 。

2. 查看int的二进制表示

int 占4字节,共32位。 正整数用原码表示。 负整数用补码表示。

#include void test1(){ for(int k=7; k>=0; k--){ //k依次等于7,6,5,4,3,2,1,0 int a=1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3