NJU1healer的个人博客分享 http://blog.sciencenet.cn/u/NJU1healer

博文

进制转换及原理(二进制、十进制、八进制、十六进制)

已有 24900 次阅读 2020-7-22 16:11 |个人分类:Python|系统分类:科研笔记

二进制

一个字节等于8个二进制数

0       0    0    0   0  0  0  0

1       1    1    1   1  1  1  1

128  64  32  16  8  4  2   1

 

1代表有,0代表没有,从右往左看,八个二进制数分别代表了1,2,4,8,16,32,64,128。这8个二进制组合可以代表1~256当中的任何一个数字(所有都是1的话加起来就是256,所有都是0的话加起来就是0。  1~256当中任何一个数字都可以从中表示出来)。这256个字符可以转换成256个字符,这就是所谓的ASCII码。

 

比如:二进制表示 37

           0       0   1    0    0   1  0  1

          128   64  32  16   8   4  2  1

1代表有,2代表没有,对照一下,为1的加起来就等于37,这就是二进制的原理。

十进制

已经很熟悉,此处省略。

八进制

一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。

[注意:以数字“0”开头表示八进制。C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。

正确格式:

"0123"相当于83,即 3*1+2*8+1*8^2=83。

"+0123"相当于83,

"-0123"相当于负83。

备注:前导不能含有字母o或者O

]

     八进制和十进制原理一样,只不过十进制不限制范围,但是8进制只是0~7,0~7这八个数字用二进制表示如上图所示,转换原理就是二进制转十进制

例子:

    十进制数115

    二进制表示就是     

           0      1    1   1   0  0  1  1

          128  64  32  16  8  4  2  1

所有有1的加起来就是115

八进制表示就是把二进制三个三个分开(左边可以无限补0)0 1    1 1  0     0  1  1

 

第一个0  1                       其实就是0  0  1   转换成八进制代表1

第二个1  1  0                   转换成八进制代表6

第三个0  1  1                   转换成八进制代表   3

所以115转换成八进制就是163

十六进制

16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。

 image.png

[注意:以0x开始的数据表示16进制是一种逢bai16进1的进位制。du一般用数字0到9和字母A到F(或a~zhif)表示,其中:A~F表示10~15。最常用(或常见)表示十六进制数值的方式是将 '0x' 加在数字前,或在数字后加上小字 16。0x2BAD 和 2BAD16都是表示十进制的11181(或1118110)。]


例子:加入有一个十六进制数字  2AF5,转换成二进制、十进制。

拆分,先看  5  换成二进制为  0 1 0 1

                 F   换成二进制为  1 1 1 1

                 A   换成二进制为  1 0 1 0

                 2   换成二进制为   0 0 1 0

所以换成二进制加起来就是 0 0 1 0, 1 0 1 0 ,1 1 1 1, 0 1 0 1

转换成十进制为 5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997

知识点补充:

关于十六进制和八进制前的“0x”“0”是数字0还是字母O (参见此博客)

1、八进制数是一种逢八进一的计数体制,基数是8,用0~7表示,如077。

2、八进制数以数字0开头。

3、十六进制数是一种逢十六进一的计数体制,基数是16,用0~9,A~F表示,如0xFF或0XFF。

4、十六进制数以数字0和字母x的组合0x或0X开头。其中字母x是不区分大小写的,即0x与0X等价。

Note:

输出打印八进制数时 %o 这里是字母 o

int a = 12; 把数 a 分别 以十进制,八进制,十六进制形式 输出打印

printf("%d,%o,%x", a, a, a);//不显示数制前缀

printf("%#d,%#o,%#x", a, a, a);//显示数制前缀


【参考】

https://www.cnblogs.com/liyichen/p/5989143.html

点滴分享,福泽你我!Add oil!



https://wap.sciencenet.cn/blog-3428464-1243124.html

上一篇:python面向对象中的__init__方法理解
下一篇:python中raise和 os.sep
收藏 IP: 211.162.81.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的其他最新博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-20 04:04

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部