免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3419 | 回复: 6
打印 上一主题 下一主题

[C] 讨论:编程中大端法与小端法产生的原因 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-22 10:30 |只看该作者 |倒序浏览
昨天,有段代码把我给弄糊涂了
*(unsigned shor int *)argv == '-e'
我本意是判断argv的字符串前两字节是否为‘-e’,如果是,条件判断成立。
可结果是,当argv的字符串前两字节为‘-e’时,条件判断还是成立。而把代码改为
*(unsigned shor int *)argv == 'e-'
时,条件判断成立 。

这是为啥??

今天研究了一阵子,结论如下:

'-e'  这样的形式的值为0x2d65  十进制就是11621

在内存中,例如int  4字节:

这端为高地址端    00 00 2d 65 这端为低地址端  (多字节对象的字节序列顺序在intel 机器上使用大端法)

但是字符串在内存中是这样的:
这端为高地址端    00 00  65 2d 这端为低地址端

字符串的读取顺序是从低地址端向高地址端读取。而数据类型的读取顺序是,根据数据类型判断数据在内存上的地址端,在这个地址端上从高地址端向低地址端看(高地址端数量级高,这也是人的习惯)。

原因找到了,可产生大端法与小端法原因是什么呢?书上老说不同处理器,采用的大小端法不一样,我老觉得不是处理器硬件层面的问题

#include <stdio.h>
int main()
{
    int a=0x61626364;
    printf("%d\n",a);
}
$cc  test.c -o test
$objdump a.out -S |grep 0x61626364
80483ed:    c7 44 24 1c 64 63 62 61    movl   $0x61626364,0x1c(%esp)

我把上面的代码编译后,再反汇编,出来上面这行。这是在我intel 机器上调出来的,是大端法。
如果在小端法的机器上,出来的就会是c7 44 24 1c 61 62 63 64 。
假如,我是说假如,我在原来使用小端法的机器上,让汇编器都使用大端法表示多字节对象的字节序列顺序。会不会出现问题?会不会混乱
如果可行的话,在原来使用大的端法的机器上,让汇编器都使用小端法表示多字节对象的字节序列顺序可行不?


大家都来讨论讨论

论坛徽章:
0
2 [报告]
发表于 2009-12-22 10:32 |只看该作者
产生的原因就是:
方便运算和合乎逻辑的矛盾

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2009-12-22 10:37 |只看该作者
产生的原因:没有一个标准指引

论坛徽章:
0
4 [报告]
发表于 2009-12-22 11:22 |只看该作者
我的理解, 如果计数法和计算机同时产生,那何为前何为后就有同一的标准,就不会出现大小端的问题了。

论坛徽章:
0
5 [报告]
发表于 2009-12-22 11:42 |只看该作者
我又有新的理解,两个习惯
1. 计数时人们习惯高位在前,低位在后。
2. 除计数外,人们习惯小的东西在前,大的东西在后。
计算机里采用习惯2,所以和习惯1矛盾,大小端问题悄然、油然、自然、冉冉而生。

论坛徽章:
0
6 [报告]
发表于 2009-12-22 12:06 |只看该作者
lz把大端小端刚好说反了吧
最低位在前的是小端

论坛徽章:
0
7 [报告]
发表于 2009-12-22 12:10 |只看该作者
产生的原因你可以去了解一下计算机的远古历史
世界上不是只有x86,也不是只有intel/windows
远古时候有好几家不同的公司做计算机,比如说sun/ibm,由于没有一个统一的标准,所以怎么摆放是各家自己说了算的。
后来各家的电脑都各自有了一定的气候,定标准的时候当然谁也说服不了谁,只好任由这种情况的存在了。
在处理器层面上有些处理器可以指明工作在大端还是小端模式的
顺带说一句,网络传送的时候使用的是大端模式
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP