二进制
一个字节等于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。字母不区分大小写。
[注意:以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?mobile=1
收藏