㈠ 是不是大多数电脑的主机字节序都是小端的
普通人用的桌面电脑,只要是Intel或AMD的x86/x64架构就一定是小端字节序。
外很多ARM
CPU可以选择数据指令字节序,不过通常也都是运行小端字节序(比如我们的智能手机)。
网络设备,像PowerPC核心的一些路由器,默认运行大端字节序。
㈡ 计算机硬件为什么要区分字节序
一、字节序定义
字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。
其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。
在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian。引用标准的Big-Endian和Little-Endian的定义如下:
a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
c) 网络字节序:4个字节的32 bit值以下面的次序传输:首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。这种传输次序称作大端字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。比如,以太网头部中2字节的“以太网帧类型”,表示后面数据的类型。对于ARP请求或应答的以太网帧类型来说,在网络传输时,发送的顺序是0x08,0x06。在内存中的映象如下图所示:
栈底 (高地址)
---------------
0x06 -- 低位
0x08 -- 高位
---------------
栈顶 (低地址)
该字段的值为0x0806。按照大端方式存放在内存中。
二、高/低地址与高低字节
首先我们要知道我们C程序映像中内存的空间布局情况:在《C专家编程》中或者《Unix环境高级编程》中有关于内存空间布局情况的说明,大致如下图:
----------------------- 最高内存地址 0xffffffff
| 栈底
.
. 栈
.
栈顶
-----------------------
|
|
|/
NULL (空洞)
/|
|
|
-----------------------
堆
-----------------------
未初始化的数据
----------------(统称数据段)
初始化的数据
-----------------------
正文段(代码段)
----------------------- 最低内存地址 0x00000000
以上图为例如果我们在栈上分配一个unsigned char buf[4],那么这个数组变量在栈上是如何布局的呢[注1]?看下图:
栈底 (高地址)
----------
buf[3]
buf[2]
buf[1]
buf[0]
----------
栈顶 (低地址)
现在我们弄清了高低地址,接着来弄清高/低字节,如果我们有一个32位无符号整型0x12345678(呵呵,恰好是把上面的那4个字节buf看成一个整型),那么高位是什么,低位又是什么呢?其实很简单。在十进制中我们都说靠左边的是高位,靠右边的是低位,在其他进制也是如此。就拿0x12345678来说,从高位到低位的字节依次是0x12、0x34、0x56和0x78。
高低地址和高低字节都弄清了。我们再来回顾一下Big-Endian和Little-Endian的定义,并用图示说明两种字节序:
以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value:
Big-Endian: 低地址存放高位,如下图:
栈底 (高地址)
---------------
buf[3] (0x78) -- 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) -- 高位
---------------
栈顶 (低地址)
Little-Endian: 低地址存放低位,如下图:
栈底 (高地址)
---------------
buf[3] (0x12) -- 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) -- 低位
---------------
栈顶 (低地址)
在现有的平台上Intel的X86采用的是Little-Endian,而像Sun的SPARC采用的就是Big-Endian。
㈢ 字符串在小字节序计算机中是按什么顺序存储的
也依然是按照字节顺序存储的,例如字符串“abc”在内存中的连续四个字节分别是0x61、0x62、0x63、0x00。
网络嫌我字数不够
㈣ 什么是电脑的十进制
电脑采用的是二进制,不是十进制。
十进制基于位进制和十进位两条原则,即所有的数字都用10个基本的符号表示,满十进一,同时同一个符号在不同位置上所表示的数值不同,符号的位置非常重要。
人类算数采用十进制,可能跟人类有十根手指有关。亚里士多德称人类普遍使用十进制,只不过是绝大多数人生来就有10根手指这样一个解剖学事实的结果。
(4)电脑一般用什么字节序扩展阅读
十进制的历史
有学者认为,北京周口店的一万多年前的山顶洞人遗址出土的骨管,以一个圆点代表1,两个圆点并列代表2,三个圆点并列代表3,五个圆点上二下三排列代表5,长圆形可能代表十。中国着名数学史家,国际科学史研究院通讯院士李迪教授认为山顶洞人骨管符号是“一种十进制思想”。
另有学者对中国青海乐都县柳湾出土一千多枚新石器时代骨片进行研究,发现它们分属马厂、半山、齐家和辛店四个中文化型。骨片长度为2-2.4厘米,厚约1毫米。骨片上有刻痕,少的一个,多不超过八个,每个骨片上的刻痕数目不超过十个,他们以此认为新石器时代已有加法运算和十进制。
㈤ [单选题] 计算机中字节是常用单位,它的英文名字是____。
Byte
字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。
一个字节存储8位无符号数,储存的数值范围为0-255。如同字符一样,字节型态的变数只需要用一个位元组(8位元)的内存空间储存。
(5)电脑一般用什么字节序扩展阅读
字节(Byte)=8位(bit)
1KB( Kilobyte,千字节)=1024B
1MB( Megabyte,兆字节)=1024KB
1GB( Gigabyte,吉字节,千兆)=1024MB
1TB( Trillionbyte,万亿字节,太字节)=1024GB
1PB( Petabyte,千万亿字节,拍字节)=1024TB
1EB( Exabyte,百亿亿字节,艾字节)=1024PB
1 ZB(Zettabyte,十万亿亿字节,泽字节)=1024EB
1YB( Yottabyte,一亿亿亿字节,尧字节)=1024ZB
㈥ 用宏判断计算机处理器是大端字节序(Big-Endian)还是小端字节序(Little-Endian)
实现同样的功能,我们来看看Linux 操作系统中相关的源代码是怎么做的:
static union { char c[4]; unsigned long mylong; } endian_test = {{ 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.mylong)
Linux 的内核作者们仅仅用一个union 变量和一个简单的宏定义就实现了一大段代码同样的功能!由以上一段代码我们可以深刻领会到Linux 源代码的精妙之处!(如果ENDIANNESS=’l’表示系统为little endian,
为’b’表示big endian )
http://blog.chinaunix.net/uid-25367385-id-188322.html
㈦ 如何写程序判断自己电脑是大端字节序还是小端字节序
Java编译后.class文件是二进制字节码,而不是系统能识别的机器码,所以直接运行.class文件,系统不能识别,而Java为了解决这个问题,采用一个中间转换过程,必须要把.class文件,转换成对应操作系统所能识别的机器码。 于是把这个转换的任务交给了JVM(java虚拟机),所以只要安装虚拟机的操作系统就能运行Java开发的程序,而不管你用的什么操作系统,因为转换工作是由虚拟机来帮你完成的。 举个例子:假如:你(相当于Java程序)和美国人(一种操作系统)谈话,而你不懂英语,美国人不懂汉语,怎么办呢?你会想到找个翻译(Java虚拟机),把你说的话翻译成英语。 这个时候你又和一
㈧ 什么是字节序
小头 (LSB):
Least Significant Bit (or Byte)
大头 (MSB):
Most Significant Bit (or Byte)
字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。
输入(输出)流字节序:
B1,B2,B3,B4,B5,B6.....
电脑中
short int a,b,c;
可能是:
a = B2 << 8 + B1;
b = B4 << 8 + B3;
c = B6 << 8 + B5;
也可能是:
a = B1 << 8 + B2;
b = B3 << 8 + B3;
c = B5 << 8 + B6;
这取决于字节序的约定。例如GIF图像文件中的许多定义块中的short int 是 a = B2 << 8 + B1; ...
即B2左移8位加B1等于一个十六位的整数。