计算机的信息表示

本文介绍了计算机内部如何使用二进制表示整数和浮点数。补码是表示有符号整数的常见方式,能够表示正负数。浮点数编码遵循IEEE标准,通过指数和尾数来表示实数。讨论了C语言中不同整型数据类型的取值范围,并解释了为什么32位系统最大支持4GB内存,而64位系统支持更大的内存。
摘要由CSDN通过智能技术生成

我们知道,计算机内部存储和处理的信息都是以二值信号来表示,也就是一个位要么是0要么是1,而单个的位(二进制数字)用处不是很大,假设组合这些位,那么这些组合起来的位,就可以有特殊含义,也就是说建立编码系统,就可以更好地表示信息。那么接下来,研究计算机最重要的三种数字表示:

  1. 无符号(unsigned)编码:基于传统的二进制表示法,只能表示非负数字。
  2. 补码编码:表示有符号整数的最常见的方式,可以表示正数、负数、0。
  3. 浮点数编码:用2为基数的科学计数法来表示实数。
整数的表示:

在c语言中,支持多种整型数据类型,这些类型可以用关键字来指定大小,比如char、short、int、long等,不仅如此,C语言还可以用unsigned来声明该数是非负数,下面列举C语言的数据类型的典型取值范围:

数据类型 最小值 最大值 byte
char -128 -127 1
unsigned char 0 255 1
short -32768 32767 2
unsigned short 0 65535 2
int -2147483648 2147483647 4
unsigned 0 4294967295 4
long -9223372036854775808 9223372036854775807 8
unsigned long 0 18446744073709551615 8
int32_t -2147483648 2147483647 4
uint32_t 0 4294967295 4

注:
1、上述为大多数64位机器的典型取值范围,其中long类型跟机器字长有关,32位机器的long型表示的范围为[-2147483648,2147483647],而unsigned long为[0,4294967295]
2、有一个关系要明白:一个字节等于8个位,即1 byte = 8 bit,而一个位要么是0要么是1,则8个位则有{[00000000],[00000001]…[11111111]}总共2^8=256个组合。
3、为什么char只能表示[-128,127]总共2^8=256个整数呢? 有前面第二点的解释,因为一个char类型是1个字节,而8个位最大只有256组合,所以char型最多表示256个整数,同样,short和int等,以此类推。

假设一个整数数据类型的数x有n位,第n位的数表示为 x n − 1 x_{n-1} xn1,所代表的无符号数为 x u x_u xu,根据无符号数编码的定义: x u x_u xu = ∑ i = 0 n − 1 \sum_{i=0}^{n-1} i=0n1 x i x_i xi 2 i 2^i 2i

举三个栗子:
编码为 [ 0000 ] 2 [0000]_2 [0000]2所代表的整数为:0 ⋅ \cdot 2 3 2^3 23+0 ⋅ \cdot 2 2 2^2 22+0 ⋅ \cdot 2 1 2^1 21+0 ⋅ \cdot 2 0 2^0 20 = 0;
编码为 [ 0010 ] 2 [0010]_2 [0010]2所代表的整数为:0 ⋅ \cdot 2 3 2^3 23+0 ⋅ \cdot 2 2 2^2 22+1 ⋅ \cdot 2 1 2^1 21+0 ⋅ \cdot 2 0 2^0 20 = 2;
编码为 [ 1011 ] 2 [1011]_2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值