计算机基础之二进制与原反补

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38701432/article/details/79474277

在计算机程序中,数值运算是基于二进制的


我们最常见的进制其实就是我们在生活中用的最多的十进制,除了十进制,还有二进制,八进制,十六进制,所谓进制其实就是计数的一种方式,十进制就是逢十进一,其它进制也是类似,二进制就是逢二进一。


二进制的产生是因为早期的电子元件只能表达开关的这两种状态;八进制在对变量进行移位操作等比较底层的程序设计是很有用的并且8进制是用于ACSIC码的;十六进制作为计算机领域一种重要的数制,对计算机理论的描述,计算机硬件电路的设计都是很有益的。比如逻辑电路设计中,即要考虑功能的完备,好要考虑用尽可能少的硬件,十六进制就能起到一些理论分析的作用。比如四位二进制电路,最多就是十六种状态,也就是一种十六进制形式,只有这十六种状态都被用上了或者尽可能多的被用上,硬件资源才发挥了尽可能大的作用。


以下是三种进制的表达方式(十进制在这不做介绍):
二进制一般以0b开头或以B结尾,
八进制一般以0开头,
十六进制一般以0x开头,数字0-9,字母a-f组成。
那么进制之间如何来转换呢?在这里介绍两种方式来做任意进制之间的转换以十进制为桥梁(位权展开法,余数定理)。
具体的推导过程我就不在此展示,下面给几个例子,供大家参考
1:得到下面数据的十进制值:
0b10101
=1*2^4+0*2^3+1*2^2+0*2^1+1*2^0
=16+0+4+0+1
=21
0123
=0*8^3+1*8^2+2*8^1+3*8^0
=0+64+16+3
=83
0x3c
=3*16^1+12*8^0
=48+12
=60

2:得到52的二进制,十进制,十六进制
得到二进制:
52 / 2 = 26   0
26 / 2 = 13   0
13 / 2 = 6    1
6  / 2 = 3    0
3  / 2 = 1    1
1  / 2 = 0    1
0b110100

得到八进制:
52 / 8 = 6 4
6  / 8 = 0      6

064

得到十六进制:
52 / 16  =  3 4
3  / 16  =  0        3

0x34
大家可以发现上面的例子都是正整数,那么负数在计算机中如何表达呢?

原码:原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小,

反码:反码是数值存储的一种,多应用于系统环境设置,反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

和补码:在计算机系统中,数值一律用补码来表示和存储,补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

有符号数据表示法的练习
A:已知某数X的原码为10110100B,试求X的补码和反码。

符号位 数值位

原码: 1 0110100

反码: 1 1001011

补码: 1 1001100

B:已知某数X的补码11101110B,试求其原码。

符号位 数值位

补码: 1 1101110

反码: 1 1101101

原码: 1 0010010


如果以上文章有什么问题,欢迎大家指正








猜你喜欢

转载自blog.csdn.net/weixin_38701432/article/details/79474277