计算机编程进制,零基础学编程之进制转换基础

769675828ed92b9f1963f06f8df8de6e.png

01十进制

十进制(逢10进1)是我们最常用的一种数位进制方式。十进制和二进制可以相互转换,如下所示:

7751f41611c7becfee33299926d0cb09.png10进制转2进制

上图中,10称做基数,10^n(10的n次幂)被称作权,… 10000、1000、100、10、1。

02二进制

二进制(逢2进1),是基数为"2"的进制。计算机使用二进制,是因为计算机设计者发现在复杂电路中,将低电平表示0,高电平表示1,只有两种电位在通过门电路之后更容易计算。其实用其它进制也可以表示,但是比较麻烦。

二进制的基数为2,权为2^n(2的n次方),……、128、64、32、16、8、4、2 1。

fcfd269e78c244f7cb04a0362fb20f8d.png2进制转16进制

03补码基础

关于补码,有比较有趣的演化过程,假如计算机中使用4位的二进制表示数据,如图3-1中的a,最多能表示0到15(10进制),后有计算机大佬在此基础上做了一个细微改动,将所有二进制以1开头的数(大于7的数)放到0之前:如图3-1的b,并且规用用这部分8-15对应二进制表示负数-1到-8,这就是4位补码:如图3-1的c。

2466d46455418dac0bc44aed54cd5b6c.png补码演化

仔细观察会发现,-1(1111)+1(0001) = 1 0000,舍弃最高位"1"(超出4位),保留最后4位(4个0),则-1(1111)+1(0001) = 0(1 0000)

4dfbfb5e30ae3de069a0be9d5906dcdb.png计算-1+1

同理-8(1000)+7(0111)=-1(1111)。

至此,得出了结论:在封闭的四位运算中(超出4位就丢弃),这种设计和规定是非常合理的。可是,我们又有了疑问:(-1)*(1)=?,会不会和结果就不一样了?我来算一下:

ea7c05d485030b16361a91f7057733e2.png计算-1*1

结果一样,(-1)*(-1)= 1即1111 * 1111 = 0001,这种数据运算规则就是补码运算。

总结:

计算机中正数和负数的关系是取反加一。举例如:~3+1=-3(~3表示对3取反)补码运算是封闭的:运算结果保留在补码范围内,超范围就溢出.补码边界运算有溢出风险.4位二进制补码最多能表示2^4(16)个数,数的范围是-8~78位二进制补码最多能表示2^8(256)个数,数的范围是-128~12716位二进制补码最多能表示2^16(65536)个数,数的范围是-32768~3276732位二进制补码最多能表示2^32个数,数的范围是-2G~2G-1(1G= 1024*1024*1024)当我们知道了计算机中的一个二进制数,比如0000 1111,它的10进制为:

0000 1111 = 2^3+2^2+2^1+2^0 = 15(十进制) // 因为是正数,直接转换既可

那1111 1001,表示的十进制数是多少?

ee965edabd3569a4f07dcad11928023f.png

则计算机中存储的1111 1001转换为十进制数是-7。反过来的换算过程如下:

4ab8a4a63c57c04e1aadf78ff03b8964.png

计算机中二进制(转)十进制:

以0开头的,直接将2进制转换为10进制;以1开头的,需要4步,按位取反->末尾位加1->转换为十进制->添加负号。十进制数(转)计算机中二进制数:

正数取原码,负数按位取反末尾加1。需要注意的是:4位补码不能表示8。

04Java中的二进制规则

Java内部只有二进制补码,计算机内部数据以二进制补码表示。Java内部采用补码运算,自动发送上溢出(乘法为上溢出)和下溢出(除法为下溢出)。Java内部没有10进制,但是Java尽量按照人类习惯输入输出。补码的负数,最高位是1,也称作符号位。

05十六进制

十六进制是二进制制的简写,方便专业人员书写二进制数据。比如一个十进制数1234567890,用十六进制表示就比二进制表示更方便,如下所示:

92e7d28c0a576b3990e69ece171ae3e1.png

十六进制的基数为16,权为16^n(16的n次方),...、4096、256、16、1。

十六进制与十进制对照表:

ba0fdbc54318eaea4494f006b0b3fed3.png

十六进制和其他进制间的转换:

41(16进制) = 4*(16^1) + 1*(16^0) = 65(10进制) = 0100 0001(2进制)

f3a1d75a66ecea218113c16d78c21810.png10进制、2进制、8进制、16进制对照表

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值