Chapter two 信息的表示和存储
1、二值信号是在通信和计算等方面更容易表示、存储和传输
2、三种重要的数字编码:无符号/二进制补码(有符号)/浮点数编码
3、计算机对于有限位数字编码来说,结果太大会导致overflow
2.1 信息存储
1、computer最小存储单位byte.每个byte 包括8位,机器级程序程序经常在二、十、十六进制之间转换。
转换规则。
转换窍门:记16进制ACF对应的10进制值,可以方便转换16进制和2进制
而2进制与10进制之间的关系主要是通过mod:
10转2:
eg. 55变二进制110111
55/2==27......1
27/2==13......1
13/2==6.......1
6/2==3........0
3/2==1........1
1/2==0........1
倒序list 110111
2转10:
Eg. 110111变55
55=2^0+2^1+2^2+2^4+2^5
=1+2+4+16+32
其实也可以这样记:2^0 2^1 2^2 2^3 2^4 2^5 2^6 2^7
1 2 4 8 16 32 64 128
以后10进制转2进制就可以用这个表来“凑”数了。
16进制与10进制的转换类似10进制与2进制。mod
因为无法通过格式化的方法直接在一般的编译器中实现10进制数字2进制输出的形式。用C语言按位与可以实现。当然用mod方法也可以。
按位与的特点是,是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0
#include <stdio.h>
int main(void)
{
const int iTimes=sizeof(int) * 8;
int iMask=1;
int x = 12345; //这个就是要转换的数
int x2[iTimes];
int i;
for( i=0 ; i<iTimes ; i++ )
{
x2[i]=x & iMask;
iMask = iMask << 1;
//printf("%d\n",iMask);
}
printf("\n(%d)d=",x);
for( i=iTimes -1 ; i >=0 ; i-- ){
printf("%d",x2[i] ? 1 : 0 );
}
return 0;
}
结果:
2、 大端法:机器按照从最高有效字节到最低有效字节的顺序存储
小端法:机器按照从最低有效字节到最高有效字节的顺序存储
例:在字ox01234567中,高字节的十六进制值为OX01,低位字节值OX67
字节的存储顺序最终取决于机器本身。大多数情况下不用考虑这些的。
但是当遇到大小端机器互传数据、检查机器级程序、编写规避正常类型系统的程序时才会用到大小端。。。。。
下面是规避正常类型系统程序代码:
#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
void show_bytes(char * start,int len)
{
int i;
for(i=0;i<len;i++)
{
printf("%.2x",start[i]);
}
printf("\n");
}
void show_int(int x)
{
show_bytes((char *)&x,sizeof(int));
}
void show_float(float x)
{
show_bytes((char *)&x,sizeof(float));
}
void show_pointer(void *x)
{
show_bytes((char*)&x,sizeof(void *));
}
int main()
{
//char *a;
//cin>>a;
//int k=strlen(a);
show_bytes("abc",3);
cout<<endl<<endl;
show_int(65);
cout<<endl<<endl;
show_float(65);
//show_pointer();
return 0;
}
结果:
明天再分析、。。。。。。