第八章 其它计算机知识
进制转换:
十进制转r进制:除r取余,直至商0,余数倒序排列。
r进制转十进制:m乘r的n次方(m为r进制每一位上的数字)。
推广:
高进制x转低进制r:x>r,除r取余,直至商0,余数倒序排列。
低进制r转高进制x:r<x,m乘r的n次方(m为r进制每一位上的数字)。
【补码】
原码
也叫 符号-绝对值码
最高位0表示正,1表示负,其余二进制位是该数字的绝对值的二进制位,才为有效数位。
原码简单易懂,但运算复杂。
反码
反码为原码的所有数位取反,即1与0互换。
移码
移码表示数值平移n位,n称为移码量
移码主要用于浮点数的阶码的存储
补码
已知十进制求二进制补码
求正整数的二进制制
除2取余,直至商为0,余数倒序排列。即直接转为二进制,前面用0来补齐位数。
求负整数的二进制
先求该负数绝对值的补码,然后将所有位取反(包括前面补齐用的0全取反变为1),末尾加1。
0的二进制全为0
已知二进制补码求十进制
如果首位是0,则表明是正整数,直接转为十进制即可。
如果首位是1,则表明是负整数,将二进制补码所有位取反(包括前面补齐用的1全取反变为0),末 尾加1,所得数即为该负数的绝对值,前加负号即可。
小技巧:当一个数的二进制码前全为用1补齐时,该数为负数,取反加1即为该数绝对值。
一个int类型变量(4字节)可存储的数字范围是多少?
最大正数用十六进制表示为:7FFFFFFF
绝对值最大的负数用十六进制表示为:80000000
【8位二进制数所代表的十进制 示意图】
二进制 十进制
00000000 ------ 0
00000001 ------ 1
.... .... ------ ...
01111111 ------ 127
正负分隔线--------------------------------------------------------------------
10000000 ------ -128 负数计算时,取反加1。
10000001 ------ -127
10000010 ------ -126
.... .... ------ ...
11111111 ------ -1
在计算机中,首位被当作正负号而不是有效数字。
规律:
最大正数的二进制代码为:0111 1111 1...
最小负数的二进制代码为:1000 0000 0...
当存储范围不足而溢出时,前面字节的数据会丢失,被保留的首位有效数字0(或1)会被当作正负号来处理。
charch = 129; //129默认为int类型,前面以0补齐,赋值给1个字节变量时,前面3个字节数据丢失。
printf("%d\n",ch); ch = -127 //这就是输出为-127的原因。
The end
2013年2月4日1:03:32
李峰