一个字节多少位?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]