C语言-->(二)进制

关于进制的转换还是很重要的

要掌握十进制、二进制、十六进制、八进制

=============================

十进制
1.由0~9组成,逢十进一

基数:10
167 = 100 + 6*10 + 7
= 7 * 10的0次方 + 6 * 10 的1次方 + 1 * 10的2次方

=============================

二进制:
1.二进制的表示方式和范围
1)以0和1表示

2.为什么要有二进制
1)供计算机内部使用
2)为什么计算机内部要使用二进制

3.十进制和二进制之间的转换
1)如何将十进制转换为二进制
1.除2取商继续除,一直到商为0为止
2.最后将所有的余数从下至上排列

eg:求 65的二进制数 1000001

商 余
65/2 32 1
32/2 16 0
16/2 8 0
8/2 4 0
4/2 2 0
2/2 1 0
1/2 0 1

//193 = 11000001 = 128 + 64 + 1 = 1 100000 1

(2)二进制转换为十进制
x*2^0 + … +x * 2^(n-1) == 10进制数 (x表示当前位的值, n表示位数)

eg: 将 01011010转换为十进制

0 *2^7 +1*2^6 +0*2^5+ 1*2^4 +1*2^3 + 0*2^2+1*2^1 + 0* 2^0=64+16+8+2=90


=============================
十六进制:
1.十六进制的表示方式和范围
1)0x开头
2)0~F 表示0~15 0 1 2 3 4 5 6 7 8 9 a b c d e f

 

0x10

2.为什么需要十六进制
1)当一个数非常大的时候,使用10进制表示不再容易理解
2)可以非常容易的表示一个二进制数

3.十六进制转十进制
1)如何将十进制转换为十六进制
1.除16取商继续除,一直到商等于0
2.最后将所有的余数从下至上排列,加上前缀0x

eg: 253的十六进制表示 == 0xfd

商 余
253/16 15 13
15/16 0 15
—————————

 

2)将十六进制进制转换为十进制
x*16^0 + … +x * 16^(n-1) == 10进制数(x表示当前位的值, n表示位数)

eg: 0xabc转换为十进制
10 * 16^2 + 11*16^1 + 12*16^0 = 2560 + 176 + 12 = 2748


4.十六进制与二进制间的转换

十六进制数 二进制数
0 0000
1 0001
2 0010
。。。。
f 1111
1)如何将十六进制转换为二进制
每位十六进制数转换为4个二进制数字

eg:将0x1234转换为二进制
0x1234 === 00010010 00110100

2)如何将二进制转换为十六进制
每4位一取,不足高位补0

eg:将二进制数1111011100转换为十六进制
0011 1101 1100 == 0x3dc


===================================
八进制(不常用):
1.八进制的表示方式和范围
1)以0开头
2)0~7 表示0~7 0 1 2 3 4 5 6 7

2.十进制转八进制
1)如何将十进制转换为十六进制
1.除8取商继续除,一直到商等于0
2.最后将所有的余数从下至上排列,加上前缀0

3.二进制与八进制间的转换
从低到高位3位一取,不足补0

4.八进制与二进制间的转换
每1位八进制数转换为3个二进制数
0 17转换成二进制

===================================

 

数据在内存中的表示方式

自然信息与计算机之间是通过十进制与二进制相互转换

位图概念 比特位 bit 10
1个字节 == 8比特位
1Byte == 8bit
1B == 8b
1.一个整数需要至少32个位表示
2.左边是高位,右边是低位
3.右边第1个二进制位称为第0位
4.最高位称为符号位,0表示正数,1表示负数

 

=====================================
原码:反码:补码
1.补码
1)在计算机系统中,数值统一使用补码来表示和存储
2.为什么要使用补码
1)可以将符号位和其它位统一处理,计算机内只有加法器
2)两个用补码表示的数相加时,如果最高位(符
号位)有进位,则进位被舍弃
3.计算机内部如何表示一个数
1)正数
1>正数的补码和原码相同
最高位称为符号位 0表示正
eg: 求10的补码

10的原码: 00000000 00000000 00000000 00001010
10的反码: 00000000 00000000 00000000 00001010
10的补码: 00000000 00000000 00000000 00001010


2)负数
1>负数的原码 1表示负
2>通过原码计算
3>负数在内存中真正的表示方式--补码
4>补码计算方式
1.对除符号位以外的所有二进制位取反
2.对取反后的二进制+1
5>对负数的操作永远使用补码,查看使用原码

6>原码转换为补码
1)符号位不变
2)剩余所有二进制数取反----反码
3)对反码进行+1操作

eg: 求-10的补码
10 原码: 00000000 00000000 00000000 00001010
-10原码: 10000000 00000000 00000000 00001010
-10反码: 11111111 11111111 11111111 11110101
-10补码: 11111111 11111111 11111111 1111011 0



7>补码转换为原码
1)符号位不变
2)剩余所有二进制数取反----反码
3)对反码进行+1操作

例子:通过二进制计算下列数的结果
5+(-10)
5 补: 00000000 00000000 00000000 00000101
-10补: 11111111 11111111 11111111 11110110
———————————————————————
11111111 11111111 11111111 1111 1 011
取反 10000000 00000000 00000000 0000 010 0
加1 10000000 00000000 00000000 0000 0101



================================================================================

posted @ 2015-02-27 16:32  timo1234  阅读(680)  评论(0编辑  收藏  举报