C语言综合3 --- 数字字节序

 前言:教学时,发现经常有一些重要的C语言知识要点,在底层开发应用广泛,但从没有一本教材详细讲解,并且有让人信服的论证.因此在教学里我把这一些要求全部总结在一起,通过学生不断反馈和补充,形成这几本文章.

-----------------------------------------------------------------------------------

数字字节序

 

Andrew Huang<bluedrum@163.com>

 

内容提要

l        数字字节序概念

l        数字字节序的测试

l        网络字节序,本地址字节序

 

不同的CPU下,数字在内存的表示是不一样的,如果要写网络通讯程序或者是在不同CPU下工作的程序,当处理数字,你必须考虑数字字节序。

      数字字节序概念

  在数学上,一个数字位数排列是有固定顺序的,即数字是低位在右,高位在左.在编程中也是遵循这样的习惯.比如数字左移,表示数字向左边移动,即低位向高位移动.进位也是由右至左依次进行.C语言里,把一个数的最高位为MSB(最高有效字节),而一个数的最低位称为LSB(最低有效位).

   C语言中,大部分数字实际上存在于内存的一个定长空间,32Bit CPU,一个整数占用了4个字节.而内存本身也是一个线性空间.即从00xFFFFFFF之类编址.内存就没有左右之分了.只有低址和高址之分.一般在绘图或调试软件里,低址也是位于左侧,高址位于右侧.

 

 

一般人的直觉是,数字在内存的存储应该是 数字的高位(MSB)在低址上,低位(LSB)在高址上.这样在内存中,数字就是按数学习惯的方法展开.

以数字0x12345678为例

 

 

计算机领域从来就不是一统天下.除了这种比较自然的存储方式.还有一种反其道而行之的表示方法.

首先我们明确一下Endian,Big-EndianLittle-Endian的概念:

端模式(Endian)的这个词出自Jonathan Swift书写的著名童话《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big EndianLittle Endian也几乎引起一场战争。在计算机业界,Endian表示数据在存储器中的存放顺序。

大小模式对数据进行存放的主要区别在于在存放的字节顺序.前面所讲的比较自然一点模式,叫大端字节序(Big-Endian

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值