Chapter2 2.1和2.2节

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;
}


结果:

 


明天再分析、。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值