04-C语言-进制

一、进制概念

二进制:数字由0、1组成;基数为2

  • {C语言中不能直接表示}

八进制:数字由0~7组成;基数为8

  • {C语言中以数字0开头表示八进制数}

十进制:数字由0~9组成;基数为10

  • {C语言中以1~9开头表示的数}

十六进制:由数字0~9和字母a~f;其中字母不区分大小写;基数为16’

  • {C语言中以0x开头的数表示十六进制数}

二、进制之间的转换

2.1 十进制转其他进制

整数部分使用除以进制基数取余数反序排列;小数部分乘以进制基数取整数顺序排列。
示例

将15,30,13.7分别转化为二进制,八进制,十六进制数。

15/2=7……1      15/8=1……7     15/16=0……15
7/2=3……1       1/8=0……1
3/2=1……1
1/2=0……1
15=1111B       15=17O        15=fH


30/2=15……0     30/8=3……6     30/16=2……8
15/2=7……1      3/8=0……3      2/16=0……2
7/2=3……1
3/2=1……1
1/2=0……1
30=11110B      30=36O        30=28H


13/2=6……1
6/2=3……0
3/2=1……1
1/2=0……1
0.7*2=1.4 取1剩下0.4
0.4*2=0.8 取0剩下0.8
0.8*2=1.6 取1剩下0.6
0.6*2=1.2 取1剩下0.2
0.2*2=0.4 取0剩下0.4
0.4*2=0.8 取0剩下0.8
0.8*2=1.6 取1剩下0.6
13.7=1101.10 1100 1100 1100……B

2.2 其他进制转化十进制

其他进制数的每一位上的数乘以进制基数的n次方然后在相加

n表示数的位数,从0开始计数。

示例:

分别将101100011B,23O,9afH表示为十进制数

101100011B=1*2^8+1*2^6+1*2^5+1*2+1=355

23O=2*8+3=19

9afH=9*16^2+10*16+15=2479

2.3 二进制转八进制、十六进制之间的转化

  • 从右向左开始计数3个二进制数对应1个八进制数
  • 4个二进制数对应1个十六进制数
  • 数位不足时用0补齐数位。
    示例:
将1001111000111B转化为八进制、十六进制数。

1 001 111 000 111=001 001 111 000 111=11707

1 0011 1100 0111=0001 0011 1100 0111=13C7

三、数在计算计中的存储

数在计算机中是以补码形式存储的

源码:是最简单的机器数表示法。可以直接得到原来数据的二进制码。符号用最高位表示符号位,‘1’表示负号‘0’表示正号。其他位存放该数的二进制的绝对值。

补码:正数的补码等于源码;负数的补码减去这个数的绝对值或源码符号位不变,数值位从右边数第一个1及其右边的0保持不变,左边安位取反。用于解决两个负数相加出错的问题

反码:正数的反码等于源码;负数的反码等于符号位不变,其它位取反。用于解决相反数相加不等于0的问题

补充

模:计数器的计数范围,如,八位有符号数的计数范围-128~127共256个数,模为256

求10011011000100的补码、反码。(最高位是符号位)
10011011000100=-1732
模为:16384
10011011000100[补码]=模-数的绝对值=16354-1732=14652=11100100111100

10011011000100[补码]={符号位不变}+{右边数第一个1及其右边的0保持不变}=11100100111100

你可能感兴趣的:(04-C语言-进制)