Byte 高位/低位简介绍(大端格式/小端格式)

简介: Byte 高位/低位简介绍(大端格式/小端格式)

摘要由CSDN通过智能技术生成
一个byte由8个二进制位构成1个字节,即1Byte=8Bit

其中左边是高位,右边是低位。

high_four = (byte & 0xf0) >> 4; (0xf0=11110000)

low_four = byte & 0x0f; (0x0f=00001111)

0&1=0,1&1=1。所以byte&0x0f就是byte&00001111。不管byte的高四位是多少,&上0x0f的高四位(0000)之后,都是0。不管

byte的低四位是多少,&上0x0f的低四位(1111)之后,都会保存原值。

比如byte是11010111。byte的高四位是1101。&上0x0f的高四位0000之后,得到的值是0000。因为1&0=0,0&0也等于0。

byte的低四位是0111。&上0x0f的低四位1111之后,得到的值是0111。也就是原来的值。所以11010111&0x0f就是00000111。也就是把byte

的高四位变成0,低四位保持原值。所以取低四位的值就是byte&0x0f。

要取得byte的高四位。就是byte & 0xf0也就是11010111&11110000=11010000。然后再右移四位。变成1101。

(通过debug发现。如果右移的数据里面都是0的话,比如11010000右移四位数,就是右移了4个0。那么,左边就会补0变成了00001101。

如果11010111没有&11110000就直接右移4位的话,会变成1101.但是前面补位的变成了1。所以不是00001101而是11111101)

大小端问题,是指在内存中(注意是内存,不是硬盘)以 字节为单位的排列顺序,与cpu和操作系统有关,操作系统可以选择大小端,java默认读取按大端读取。

大端:高位存在低地址,低位存在高地址;
小端:高位存在高地址,低位存在低地址;

举个例子,从内存地址0x0000开始有以下数据

        0x0000    0x12
        0x0001    0x34
        0x0002    0xab
        0x0003    0xcd
    如果我们去读取一个地址为0x0000的四个字节变量:
    若字节序为big-endian,则读出结果为0x1234abcd;
    若字节序位little-endian,则读出结果为0xcdab3412.

    如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为:
                     big-endian      little-endian
    0x0000          0x12                  0xcd
    0x0001          0x23                  0xab
    0x0002          0xab                  0x34
    0x0003          0xcd                  0x12

    Intelx86系列以及ARM系列CPU都是little-endian的字节序.

java 中有两个byte ,byte b[]=[0xcd,0xab],按小端读取就变成[0xab,0xcd]

还不懂? 再解释一遍:以下是另一位大佬的解释

一、高地址和低地址

image.png

二、高字节低字节

如int a=16777220,化为十六进制是0x01 00 00 04,则04属于低字节,01属于高字节。

三、大小端模式

(1)如果a在内存中的存放顺序为下图(即低字节存放在高地址),则为大端模式

image.png

(2)如果a在内存中的存放顺序为下图(即低字节存放在低地址),则为小端模式
image.png

(3)如何互换(通过移位操作再或)

image.png

四、存放顺序

数据在内存中存放的原则

(1)一个整数类型内部

低地址存储低位,高地址存储高位。比如int a=1,则存储情况为0000(高地址) 0000 0000 0001(低地址)。

(2)若干个局部变量(在栈中存储的)

先定义的高地址,后定义的低地址。

(3)类、结构体或数组的元素

先定义的低地址,后定义的高地址。
相关文章
|
4月前
|
存储
计算机存储,字节分为大端和小端
计算机存储,字节分为大端和小端
75 1
|
4月前
|
存储 网络协议 API
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
348 1
|
存储 C语言
大端存储和小端存储
1.大小端字节序 2.大端存储 3.小端存储 4.为什么会有大小端存储模式之分? 5.如何判断当前机器是大端存储还是小端存储 方法1 方法2
2867 0
单字节,双字节,四字节能够表示的数值大小范围分别是多少
单字节,双字节,四字节能够表示的数值大小范围分别是多少
|
4月前
|
存储 小程序 编译器
什么是“大小端字节序”存储模式?
这篇内容讨论了计算机内存中存储整型变量的方式,特别是针对不同字节序(大端和小端)的概念。文章首先解释了正负整数在内存中以补码形式存储的规则,然后提出了一个问题:当一个4字节的整数在内存中存储时,其字节是如何分布的?接着,文章引入了大端字节序和小端字节序的概念,其中大端模式将高位字节存储在低地址,小端模式则相反。文章通过示例说明了两种存储模式的区别,并提供了一道题目来判断当前机器使用的字节序。最后,给出了一个简单的程序来检测系统是大端还是小端。
61 0
什么是“大小端字节序”存储模式?
|
11月前
|
存储 C语言
BIT-5数据在内存中的存储及字符函数(10000字详解)
BIT-5数据在内存中的存储及字符函数(10000字详解)
67 0
|
存储
大端法与小段法的区别
大端法与小段法的区别
207 0
|
存储 Linux C语言
用c语言将文件中十六进制数据与二进制数据相互转换
用c语言将文件中十六进制数据与二进制数据相互转换
270 0
大小端(字节序)存储模式
大小端(字节序)存储模式
大小端(字节序)存储模式
|
存储 Go
字节存储顺序(大端和小端)
字节存储顺序(大端和小端)
177 0
字节存储顺序(大端和小端)