c语言学习笔记6之进制转换
2016-05-14 23:34
302 查看
我们要知道我们的电脑只能识别1和0,而它识别的方式就是通过电路的接通与断开也就是开关的开和闭。所以一个开关有两种情况,即1和0
两个开关有4种情况,11(开开),10(开关),00(关关)01(关开)
由此引申到了二进制,即逢二进一,例如1为1,2为10,4为100,8为1000
我们习惯都是用十进制来表示数,所以涉及到了进制的转换常用的进制有二进制,八进制,十进制,十六进制。生活中也有进制,如时间小时分钟秒的六十进制,秒和毫秒的1000进制
而它们是如何转化的呢?
1.二进制与十进制的转换
1)位与权
93 = 9 * 10 + 3 * 1
位 权 位 权
整数93在一个字节中的二进制形式:
0 1 0 1 1 1 0 1 --------------------位
128 64 32 16 8 4 2 1 ----------------- 权
2)零和正数:符号位(最高位)为0
A.二转十:一位加权,零位不见
01011101=64+16+8+4+1=93
01101101=64+32+8+4+1=109
B.十转二:有权添一,无权补零
93-64=29-16=13-8=5-4=1 -> 01011101
109-64=45-32=13-8=5-4=1 -> 01101101
127-64=63-32=31-16=15-8=7-4=3-2=1 -> 01111111
3)负数:符号位(最高位)为1
A.二转十:取反加一,转十添负
10100011 取反01011100 加一 01011101
转十64+16+8+4+1=93 添负-93
10010011 取反01101100 加一01101101
转十64+32+8+4+1=109 添负-109
B.十转二:去负转二,取反加一
-93 去负93 转二93-64=29-16=13-8=5-4=1->01011101 取反10100010 加一10100011
-109去负109 转二109-64=45-32=13-8=5-4=1->01101101 取反10010010 加一10010011
二进制和八进制的转换
三位二进制对应一位八进制
十进制 二进制 八进制
0 000 0
1 001 1
2 010 2
3 011 3
4 100 4
5 101 5
6 110 6
7 111 7
二进制和十六进制的转换
四位二进制对应一位十六进制
十进制 二进制 十六进制
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
一个字节对应两位十六进制
93 0101 1101 0x5D
109 0110 1101 0x6D
-93 1010 0011 0xA3
-109 1001 0011 0x93
算式演示:
65/2=32/2=16/2=8/2=4/2=2/2=1
1 0 0 0 0 0 1== 0100 0001==0x41
65/8=8/8=1
1 0 1==0101
65/16=4
1 4==0x41
-193取正193
193/2=96/2=48/2=24/2=12/2=6/2=3/2=1
1 0 0 0 0 0
4000
1 1 ==1100 0001
==0011 1110+1=0011 1111=63
10/2=5/2=2/2=1
0 1 0 1 ==1010
100/2=50/2=25/2=12/2=6/2=3/2=1
0 0 1 0 0 1 1=== 001 100 100==0144
64 32 4==100
100/8=12/8=1
4 4 1==0144
100/16=6
4 6==0x64
10000/8=1250/8=156/8=19/8=2
0 2 4 3 2=023420
两个开关有4种情况,11(开开),10(开关),00(关关)01(关开)
由此引申到了二进制,即逢二进一,例如1为1,2为10,4为100,8为1000
我们习惯都是用十进制来表示数,所以涉及到了进制的转换常用的进制有二进制,八进制,十进制,十六进制。生活中也有进制,如时间小时分钟秒的六十进制,秒和毫秒的1000进制
而它们是如何转化的呢?
1.二进制与十进制的转换
1)位与权
93 = 9 * 10 + 3 * 1
位 权 位 权
整数93在一个字节中的二进制形式:
0 1 0 1 1 1 0 1 --------------------位
128 64 32 16 8 4 2 1 ----------------- 权
2)零和正数:符号位(最高位)为0
A.二转十:一位加权,零位不见
01011101=64+16+8+4+1=93
01101101=64+32+8+4+1=109
B.十转二:有权添一,无权补零
93-64=29-16=13-8=5-4=1 -> 01011101
109-64=45-32=13-8=5-4=1 -> 01101101
127-64=63-32=31-16=15-8=7-4=3-2=1 -> 01111111
3)负数:符号位(最高位)为1
A.二转十:取反加一,转十添负
10100011 取反01011100 加一 01011101
转十64+16+8+4+1=93 添负-93
10010011 取反01101100 加一01101101
转十64+32+8+4+1=109 添负-109
B.十转二:去负转二,取反加一
-93 去负93 转二93-64=29-16=13-8=5-4=1->01011101 取反10100010 加一10100011
-109去负109 转二109-64=45-32=13-8=5-4=1->01101101 取反10010010 加一10010011
二进制和八进制的转换
三位二进制对应一位八进制
十进制 二进制 八进制
0 000 0
1 001 1
2 010 2
3 011 3
4 100 4
5 101 5
6 110 6
7 111 7
二进制和十六进制的转换
四位二进制对应一位十六进制
十进制 二进制 十六进制
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
一个字节对应两位十六进制
93 0101 1101 0x5D
109 0110 1101 0x6D
-93 1010 0011 0xA3
-109 1001 0011 0x93
算式演示:
65/2=32/2=16/2=8/2=4/2=2/2=1
1 0 0 0 0 0 1== 0100 0001==0x41
65/8=8/8=1
1 0 1==0101
65/16=4
1 4==0x41
-193取正193
193/2=96/2=48/2=24/2=12/2=6/2=3/2=1
1 0 0 0 0 0
4000
1 1 ==1100 0001
==0011 1110+1=0011 1111=63
10/2=5/2=2/2=1
0 1 0 1 ==1010
100/2=50/2=25/2=12/2=6/2=3/2=1
0 0 1 0 0 1 1=== 001 100 100==0144
64 32 4==100
100/8=12/8=1
4 4 1==0144
100/16=6
4 6==0x64
10000/8=1250/8=156/8=19/8=2
0 2 4 3 2=023420
相关文章推荐
- C++实现委托机制(一)
- C语言 - n的阶乘 递归
- xgboost C++ window编译问题解决与安装
- C++走向远洋——49(项目一2、复数类中的运算符重载、类的友元函数)
- C++静态成员(静态成员变量、静态成员函数)与正常成员互相调用的权限问题
- 关于vector在堆上还是在栈上的思考与vector.push_back()究竟放入的是什么
- C++走向远洋——48(项目一1、复数类中的运算符重载、类的成员函数)
- 17907955 2016-05-14 17:17:32 biss A - Summer Camp GNU C++11 Accepted 15 ms 2200 KB
- 第7周 C语言程序设计(新2版) 练习9/10 解释原理与大写变小写
- C++走向远洋——47(第十二周、运算符重载基础程序、阅读)
- C++数组在函数中的传递与返回
- C++之RAII惯用法
- essential c++ 练习题(1)
- C++子父类成员之间相互访问的权限分析
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C/C++标准误导篇
- C++中模板类引入
- faster_rcnn c++版本的 caffe 封装,动态库(2)
- c++中string类成员函数的总结
- 第7周 C语言程序设计(新2版) 各类位运算符定义