二进制表示整数及运算

文章详细介绍了计算机内部如何使用二进制表示和存储信息,包括字节的概念、十六进制作为更便捷的表示方式,以及大端法和小端法在多字节对象存储中的应用。此外,还讨论了掩码在位操作中的作用,无符号数和补码编码在整数表示中的不同,以及整数运算中的补码计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现代计算机存储和处理信息以二值信号表示,二值信号能够很容易地被表示、存储和传输。例如穿孔卡片上有洞或无洞、电压的高低或顺时针、及顺时针或逆时针的磁场。

图 二进制与电压的关系

1 二进制

大多数计算机使用8位作为一个字节,是最小的可寻址的内存单位。一个字节的值域是00000002 ~ 111111112。如果看出十进制整数,它的值域是010~25510。

这两种方式的表示方法都不合适:二进制表示法太冗长,十进制表示法与位模式的互相转换很麻烦。

1.1 十六进制

十六进制(简写为”hex”)使用 ‘0’~‘9’及 ‘A’~‘F’来表示16个可能的值。

十进制

0

3

17

29

162

二进制

0000 0000

0000 0011

0001 0001

0001 1101

1010 0010

十六进制

00

03

11

1d

a2

表 十进制、二进制与十六进制的表示

在大部分开发语言中,以0x或0X开头的数字常量被认为是十六进制的值。

1.2寻址和字节顺序

对于跨越多字节的程序对象,必须建立两个规则:这个对象的地址是什么,以及在内存中如何排列这些字节。

图 一个int类型对象在内存中的存储形式

一个类型为int的变量的大小为4个字节。其地址是0x50。这个变量的四个字节存储在0x50,0x51,0x52,0x53这四个位置中。

1.2.1 大端法与小端法

大端法:按最高有效字节到最低有效字节的顺序存储;

小端法:按最低有效字节到最高有效字节的顺序存储;

大小端法没有优劣之分,不同厂商在选择字节排序顺序时选择了不同的规则。

图 值为0x01234567的int类型大小端法存储方式

1.3 掩码

掩码是一串二进制代码对目标字段进行位与运算,屏蔽当前的输入位。将源码与掩码经过按位运算或逻辑运算得出新的操作数。

例如将ASCII码中的大写字母改作小写字母。A的码值位65(0100 0001),a的码值为97(0110 0001)。将A 转化为小写,只需将A的码值与(0010 000)进行或运算。

2 整数表示

用位来编码整数有两种不同的方式:一种只能表示非负数(无符号数),而另一种能够表示负数、零和正数。

表 整数的数据与算术操作术语。小标w表示数据中的位数

假设有一个整数数据类型有w位,我们将位向量写成\vec{x},表示整个向量,或者写成[xw-1,xw-2,...,x0],表示向量中的每一位。

2.1 无符号与补码的编码

2.1.1 无符号数编码

2.1.2 补码编码

2.2 补码扩展一个数字的位

2.3 补码截断一个数字的位

3 整数运算

3.1 补码的非

3.1.1  -x = ~x + 1

这个规律在计算十六进制是哪个数的补码时非常有帮助,比如计算0xab是哪个数的补码。

X = [1010 1011]  ~X = [0101 0100]

-X = ~X + 1 = [0101 0100] + 1 = [0101 0101]= 85

所以 0xab 是 -85的补码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值