程序员考试笔记(1)

二,八,一○,一六进制的转换:

2. 数制之间的转换(1)十进制整数转换为二进制整数
  采用基数2连续去除该十进制整数,直至商等于“0”为止,然后逆序排列余数。
  (2)十进制小数转化为二进制小数
  连续用基数2去乘以该十进制小数,直至乘积的小数部分等于“0”,然后顺序排列每次乘积的整数部分。
  (3)十进制整数转换为八进制整数或十六进制整数
  采用基数8或基数16连续去除该十进制整数,直至商等于“0”为止,然后逆序排列所得到的余数。
  (4)十进制小数转换为八进制小数或十六进制小数
  连续用基数8或基数16去乘以该十进制小数,直至乘积的小数部分等于“0”,然后顺序排列每次乘积的整数部分。
  (5)二、八、十六进制数转换为十进制数
  用其各位所对应的系数,按“位权展开求和”的方法就可以得到。其基数分别为2、8、16。
  (6)二进制数转换为八进制数
  从小数点开始分别向左或向右,将每3位二进制数分成1组,不足3位数的补0,然后将每组用1位八进制数表示即可。
  (7)八进制数转换为二进制数
  将每位八进制数用3位二进制数表示即可。
  (8)二进制数转换为十六进制数
  从小数点开始分别向左或向右,将每4位二进制数分成1组,不足4位的补0,然后将每组用一位十六进制数表示即可。
  (9)十六进制数转换为二进制数
  将每位十六进制数用4位二进制数表示即可。
  【例2.1】将十进制整数(105)10转换为二进制整数,采用“除2倒取余”的方法,过程如下:
2 ︳105
2 ︳52 余数为1
2 ︳26 余数为0
2 ︳13 余数为0
2 ︳6 余数为1
2 ︳3 余数为0
2 ︳1 余数为1
0 余数为1
所以,(105)10=(1101001)2

  【例2.2】将十进制小数(0.8125)10转换为二进制小数,采用“乘2顺取整”的方法,过程如下:
0.8125×2=1.625 取整数位1
0.625×2=1.25 取整数位1
0.25×2=0.5 取整数位0
0.5×2=1.0 取整数位1
  所以,(0.8125)10=(0.1101)2如果出现乘积的小数部分一直不为“0”,则可以根据精度的要求截取一定的位数即可。

  【例2.3】将十进制整数(2347)10转换为十六进制整数,采用“除16倒取余”的方法,过程如下:
16 ︳2347
16 ︳146 余数为11(十六进制数为B)
16 ︳ 9 余数为2
0 余数为9
  所以,(2347)10=(92B)16

含小数位的二进制数转为10进制数:

小数部分从小数点位置开始:1/2,1/4,1/8,1/16....
即:1010.1011=>8+2+1/2+1/8+1/16
(“^”代表幂)
1101.0111=>1*2^3+1*2^2+0*2^1+1*2^0+0*2^(-1)+1*2^(-2)+1*2^(-3)+1*2^(-4)

原码,反码,补码,移码

原码
  正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。用这样的表示方法得到的就是数的原码。
  【例2.13】当机器字长为8位二进制数时:
X=+1011011 [X]原码=01011011
Y=+1011011 [Y]原码=11011011
[+1]原码=00000001 [-1]原码=10000001
[+127]原码=01111111 [-127]原码=11111111
  原码表示的整数范围是:
  -(2n-1-1)~+(2n-1-1),其中n为机器字长。
  则:8位二进制原码表示的整数范围是-127~+127
16位二进制原码表示的整数范围是-32767~+32767

反码
  对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。【例2.14】当机器字长为8位二进制数时:
  X=+1011011 [X]原码=01011011 [X]反码=01011011
  Y=-1011011 [Y]原码=11011011 [Y]反码=10100100
  [+1]反码=00000001 [-1]反码=11111110
  [+127]反码=01111111 [-127]反码=10000000
  负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。 反码表示的整数范围与原码相同。
补码
  
正数的补码与其原码相同,负数的补码为其反码在最低位加1。

  【例2.15】(1)X=+1011011 (2) Y=-1011011
  (1)根据定义有: [X]原码=01011011 [X]补码=01011011
  (2) 根据定义有: [Y]原码=11011011 [Y]反码=10100100
  [Y]补码=10100101
  补码表示的整数范围是-2n-1~+(2n-1-1),其中n为机器字长。
  则:8位二进制补码表示的整数范围是-128~+127
16位二进制补码表示的整数范围是-32768~+32767
  当运算结果超出这个范围时,就不能正确表示数了,此时称为溢出。
补码与真值之间的转换
  正数补码的真值等于补码的本身;负数补码转换为其真值时,将负数补码按位求反,末位加1,即可得到该负数补码对应的真值的绝对值。

  【例2.16】[X]补码=01011001B,[X]补码=11011001B,分别求其真值X。
  (1)[X]补码代表的数是正数,其真值:
X=+1011001B
=+(1×26+1×24+1×23+1×20)
=+(64+16+8+1)
=+(89)D
  (2)[X]补码代表的数是负数,则真值:
X=-([1011001]求反+1)B
=-(0100110+1)B
=-(0100111)B
=-(1×25+1×22+1×21+1×20)
=-(32+4+2+1)
=-(39)D

移码:

移码(又叫增码)是符号位取反的补码,一般用做浮点数的补码,引入的目的是为了保证浮点数的机器零为全0。

  ①移码的定义:设由1位符号位和n位数值位组成的阶码,则 [X]移=2En + X -2n≤X ≤ 2n

  例如: X=+1011 [X]移=11011 符号位“1”表示正号

  X=-1011 [X]移=00101 符号位“0”表示负号

  ②移码与补码的关系: [X]移与[X]补的关系是符号位互为相反数(仅符号位不同),

  例如: X=+1011 [X]移=11011 [X]补=01011

  X=-1011 [X]移=00101 [X]补=10101


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值