详解计算机内部存储数据的形式 二进制数(2)

简介: 详解计算机内部存储数据的形式 二进制数(2)

移位运算也可以通过数位移动来代替乘法运算和除法运算。左移两位后数值变成


了原来的 4 倍。 十进制数左移后会变成原来的 10 倍、 100 倍、 1000 倍……同样,二进制数左移后就会变成原来的 2 倍、 4 倍、 8倍 …… 反之, 二进制数右移后则会变成原来的1/2、1/4、1/8…


四、表示负数的“补数”


二进制数中表示负数值时, 一般会把最高位作为符号来使用, 因此我们把这个最高位称为符号位。符号位是 0 时表示正数 , 符号位是1 时表示负数。


那么-1 用 8 位二进制数来表示的话是什么样的呢? 可能很多人会认为“1 的二进制数是 00000001, 因此-1 就是 10000001”,但这个答案是错的, 正确答案是

11111111。


计算机在做减法运算时, 实际上内部是在做加法运算。 用加法运算来实现减法运算, 为此, 在表示负数时就需要使用“二进制的补数”。补数就是用正数来表示负数。


补数如何获得? 只需要将二进制数的各数位的数值全部取反 ,然后再将结果加 1


用 8 位二进制数表示- 1 时, 只需求得 1,也就是 00000001 的补数即可。 具体来说, 就是将各数位的 0 取反成 1,1 取反成 0, 然后再将取反的结果加 1, 最后就转化成了 11111111


微信图片_20220111210215.png


微信图片_20220111210219.png


那么,对于一个补数,如何知道它所代表的负数值是多少呢?这时我们可以利用负负得正这个性质。补数代表一个负数,那么补数的补数代表一个正数,这个正数取负就是这个补数的值。如 11111110,最高位是1,因此代表一个负数,11111110取反再加1为00000010。 这个是 2 的十进制数。 因此,11111110 表示的就是-2。


五、逻辑右移和算术右移的区别


当二进制数的值表示图形模式而非数值时,== 移位后需要在最高位补 0==。 类似于霓虹灯往右滚动的效果。 这就称为逻辑右移


将二进制数作为带符号的数值进行运算时, 移位后要在最高位填充移位前符号位的值( 0 或 1)。 这就称为算术右移。即如果数值是用补数表示的负数值, 那么右移后在空出来的最高位补 1, 就可以正确地实现 1/2、 1/4、 1/8 等的数值运算。 如果是正数, 只需在最高位补 0即可。



微信图片_20220111210249.png

相关文章
|
6月前
|
存储 编译器 C语言
C语言:数据在内存中的存储形式
C语言:数据在内存中的存储形式
122 0
|
存储 C语言 C++
C语言之数据的存储2(浮点数在内存中如何存储,如何输出,查看不同类型数据在内存中表示的范围的方法,十进制浮点数转化为二进制的方法)
C语言之数据的存储2(浮点数在内存中如何存储,如何输出,查看不同类型数据在内存中表示的范围的方法,十进制浮点数转化为二进制的方法)
129 0
|
4月前
|
存储
计算机中二进制与数字逻辑
【7月更文挑战第26天】
74 2
|
6月前
|
存储 数据格式 Python
使用二进制方式向文件读写一组数据
使用二进制方式向文件读写一组数据
58 0
|
6月前
|
存储 C语言 数据格式
用二进制方式向文件读写一组数据
用二进制方式向文件读写一组数据
56 1
|
6月前
|
存储
计算机中数据的存储及二,八,十六进制的介绍
本文将向大家介绍各种进制其中包括:二级制,八进制,十六进制;数据在内存中将如何存储。
164 0
|
存储 Java 程序员
计算机中数据的存储(基础篇)
计算机中数据的存储(基础篇)
1192 0
|
存储 机器学习/深度学习 C++
C/C++数据在计算机内存中的存储形式详解
C/C++数据在计算机内存中的存储形式详解
|
存储 Java
在计算机中存储整数
在计算机中存储整数
188 0
|
存储
变量的储存方式
变量的储存方式
235 0