概述

机器是分大小端的,这对我们编程有什么影响呢?什么又是大小端呢?也许我们很多时候都不清楚,但仍然可以很好地使用电脑,或者编写代码。但我认为《圣经》里有句话说得很好,“你应该了解真相,真相会使你自由”。

所以这次,我要揭开“字节端”的面纱,共享科学之美。

小故事

Jonathan swift在1726年写的讽刺小说《格列佛游记》,小人国的内战就源于吃水煮鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生6次叛乱,其中一个皇帝送了命,另一个丢了皇位。

这就是Endian的由来。

大小端应用领域

各个体系的计算机通常采用的字节存储机制主要有两种:大端(Big-Endian)和小端(Little-Endian)。

Little-Endian主要用于现在的pc机上,比如Intel的x86系列;Big-Endian主要指PowerPC系列处理器。

另外,目前的TCP/IP网络及Java虚拟机的字节序都是Big-Endian的,这意味着如果通过网络传输0x12345678这个整型变量,首先被发送的应该是0x12,接着0x34,0x56,0x78。所以我们的程序在处理网络流的时候,必须注意字节序的问题。

大小端原理

MSB:Most Significant Bit/Byte,译为最重要的位或最重要的字节。

用来表明在一个bit序列(1byte是8个bit组成的序列)或一个byte序列(1word是2个byte组成的序列)中对整个序列取值影响最大的那个bit/byte。

LSB:Least Significant Bit/Byte,译为最不重要的位或最不重要的字节。

用来表明在一个bit序列(1byte是8个bit组成的序列)或一个byte序列(1word是2个byte组成的序列)中对整个序列取值影响最小的那个bit/byte。

举个栗子

一个十六进制的整数:0x12345678

0x12就是MSB,0x78就是LSB。

而对于0x78这个字节,它的二进制值0x01111000,那么最左边的0就是MSB,最右边0就是LSB。

Big-Endian

Big-Endian其实就是规定MSB在存储时放在低地址,在传输时MSB放在流的开始;

LSB存储时放在高地址,在传输时放在流的末尾。

Little-Endian

Little-Endian其实就是规定MSB在存储时放在高地址,在传输时MSB放在流的末尾;

LSB存储时放在低地址,在传输时放在流的开始。

举个栗子

0x12345678

Big-Endian

地址0:0x12;地址1:0x34;地址2:0x56;地址3:0x78

Little-Endian

地址0:0x78;地址1:0x56;地址2:0x34;地址3:0x12

总结

其实大小端很简单只需了解几点:

大小端是由硬件决定的,小端主要是x86处理器,大端主要是PowerPC;

大小端是一种字节存储机制;

大端是最重要的字节存储在低地址;

小端是最重要的字节存储在高地址。

java虚拟机 大小端_每个程序员都应当知道的“大小端”相关推荐

  1. 一般项目中哪里体现了数据结构_优秀程序员都应该学习的数据结构与算法项目(GitHub 开源清单)...

    前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 强烈推荐 GitHub 上值得前端学习的数据结构与算法项目,包含 gif ...

  2. 入党对程序员有什么用_为什么程序员都喜欢用两个大屏显示器?网友:一个复制一个粘贴...

    如今的程序员似乎对办公电脑的配置要求非常高,连一些相对普通的配置都不入他们的"法眼"!都要比较先进的配置.不过想想也是,毕竟电脑是他们天天打交道的玩意.然而笔者却发现,程序员的办公 ...

  3. java职业发展路线图_从程序员到CTO的Java技术路线图 JAVA职业规划 JAVA职业发展路线图 系统后台框架图、前端工程师技能图 B2C电子商务基础系统架构解析...

    http://zz563143188.iteye.com/blog/1877266在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样 ...

  4. Java中合法的关键词_优秀程序员必须掌握的java中50个关键字

    关键字和保留字的区别 正确识别java语言的关键字(keyword)和保留字(reserved word)是十分重要的.Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表 ...

  5. java学习文档_资深程序员带你深入了解JAVA知识点,实战篇,PDF文档

    JAVA 集合JAVA 集合面对浩瀚的网络学习资源,您是否为很难找到适合自己的学习资源而感到苦恼过?那么,您来对地方了.在这里我们帮助大家整理了一份适于轻松学习 Java 文章的清单.JVM 文字太多 ...

  6. java web swing 教程_好程序员Java教程解读什么是swing

    原标题:好程序员Java教程解读什么是swing 好程序员Java教程解读什么是swing,swing是java GUI应用程序,也就是java做的桌面应用.运行swing程序要求用户电脑上有java ...

  7. java前台界面设计_前端程序员要懂的 UI 设计知识

    前端程序员要懂的 UI 设计知识 疯狂的技术宅 前端先锋 翻译:疯狂的技术宅 作者:Per Harald Borgen 来源:freecodecamp 正文共:1401 字 预计阅读时间:5分钟 作为 ...

  8. java程序设计蜘蛛纸牌_介绍程序员玩纸牌

    java程序设计蜘蛛纸牌 在玩扑克,二十一点和纸牌等经典纸牌游戏时,了解程序员的历史 (Learn about programmer history while you play classic ca ...

  9. 二叉树的字符图形显示程序_每个程序员都必须知道的8种通用数据结构

    作者:IT-Evan https://www.cnblogs.com/IT-Evan/p/12444968.html 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操 ...

最新文章

  1. 使用Python,OpenCV,dlib进行睡意检测(疲劳驾驶检测)
  2. Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记
  3. ubuntu mysql 安装
  4. IBM powerVM VIOS
  5. maven snapshot依赖 打包_Maven教程2:Maven项目构建过程练习
  6. e0266 cout 不明确_荐书 | 不正义的时代,识别不正义的多重面孔
  7. phpQuery乱码解决经验分享
  8. 架构-大数据架构-阿里
  9. android手机邮箱权限,Android手机邮箱设置方法
  10. let与var的区别(重点看例子)
  11. 28BYJ-48步进电机
  12. 前序、中序、后序表达式
  13. 永磁同步电机矢量控制中的双闭环是什么意思_STM32 TALK | 无感FOC方案原理机器控制难点分析...
  14. ARM处理器9种基本寻址方式,和单片机微机原理寻址方式截然不同,(例如没有直接地址寻址,只能间接指针寻址或者寄存器变址寻址,立即数寻址,不是所有立即数都可直接寻址)不可套用理解。需独立学习
  15. windows程序设计(3):窗口
  16. 如何在html中插入本地音乐
  17. 荣耀电脑怎样更改计算机名称,王者荣耀荣耀战区怎么修改别的地区?手机电脑改荣耀战区不封号操作方法[多图]...
  18. 合宙Air105|CRYPTO|加密与解密|算法|RSA|HASH函数| BASE64|MD5|SHA1|SHA256|CRC|官方demo|学习(4):CRYPTO(加密与解密)
  19. 天源财富:突破“极限”!我科学家发现迄今最高能量光子
  20. 数学建模番外篇8:画图配色

热门文章

  1. 【程序员应该知道的十八条法律与法规】法律学习
  2. 使用nwjs-builder-phoenix构建跨平台桌面应用程序
  3. IE浏览器内容加载完成,进度条不结束解决
  4. 武侠玄幻之无极剑仙(三)
  5. 微信好友分享的棋牌游戏类app下载链接在微信中无法打开的解决方案
  6. 抖音短视频APP开发进度条(ProgressBar)的功能与用法
  7. 同底数幂比较大小方法_比较幂大小的方法
  8. 关系型数据库的演变以及非关系型数据库
  9. drawImage实现
  10. 苹果音频线美国FCC认证办理