查看: 649  |  回复: 0
  一个字节多少位?Byte 高位/低位简介绍(大端格式/小端格式)
楼主
发表于 2023年7月1日 16:04

一个字节多少位?8位。

字节是计算机中数据存储的最小单位,是一个8位二进制数,一个二进制位只能代表0和1,字节是计算机中数据处理的基本单位,计算机以字节存储和解释信息,规定一个字节由八个二进制位组成,即一个字节等于八位。


什么是字节?

一个英文字母占一个字节,一个汉字占两个字节,英文标点符号占一个字节,中文标点符号占两个字节,计算机中用二进制数序列作为数字单位,一般是8位二进制数,例如,ASCII码是一个字节。


什么是二进制?

二进制是计算技术中广泛使用的一种数字系统,二进制数据是由0和1表示的数字,它的基数是2,进位规则是“每二进一”,借位规则是“借一当二”,将十进制数除以要转换的十进制数,并在旁边记下每个除法的余数,得到的商将继续除以十进制数,直到余数为0。


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

一个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]

您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com