java的byte数组的不同写法

article/2025/9/30 14:51:30

经常看到java中对byte数组的不同定义,粗略整理的一下:
一个字节(byte)=8位(bit),“byte数组”里面全部是“byte”,即每一个byte都可以用二进制、十六进制、十进制来表示。

 

首先八位二进制数0000 0000 ~1111 1111,一共可以表示2^8=256位数,
如果想要表示无符号整数,可以表示0~255。
如果想要表示有符号整数,将
左边第一位作为符号位,即0代表正数,1代表负数,后面7位数值域可以表示0~127,这就是原码定义。

我们先来看看8位二进制:00010110,

  • 当把它看作无符号数时,计算方法如下:
    二进制:00010110 ------> 0*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = 22
  • 当把它看作有符号数时,左边第一位0表示正数,只计算后面7位,计算方法如下:
    二进制:00010110 ------> 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = 22

Java没有无符号类型,全部是有符号类型的数据类型。但是其它语言,如C语言的unsigned short 无符号数,它值的范围就是要从0开始,并且比java的short类型保存的数据范围更大。
因为java只有有符号的数据类型,如short 的表示范围 -128到+127,这就是代表有符号的数据类型了。

在实际开发中,可能要与C写的硬件接口,网络接口相互直接数据交互,此时由于java没有无符号的数据类型,导致java与C看似相同的数据类型,其实存储空间确是不同的,这个问题解决方法是java用更高的存储数据类型,如果C用int,你的java就要考虑用Long或者BigInteger了。还有一种方法就是用java的guava框架来实现你的目标了。

 

在Java工程代码中

二进制:00010110 ------> 0*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = 22
16进制:  0x16 ----------> 1*16^1 + 6*16^0  = 22
十进制:22

所以下面三者等价:

byte [] aa = {00010110,  01010010,  10111000};
byte [] aa = {0x16,      0x52,      0xB8};
byte [] aa = {22,        82,        184};

  • 在Eclipse断点调试的时候,看到的byte数组内容都是用十进制表示
  • 有时会看到负数,是因为:java读取的方式只支持字节数组,一个byte = 8位,所以一个byte容量不能超过127,如果超过就会溢出,以负数的形式显示。
  • 溢出原因如下:java采用补码存储整数,int型为32位二进制,byte为8位二进制 

那么130在内存中的表示形式:00000000 00000000 00000000 10000010  
这样截取后8位就变成10000010,补码表示的时候第一位是符号位,0正1负,所以可以知道10000010肯定是一个负数,
再来看它的数值部分,补码由正数变负数,还是正数变负,方法:“按位取反,再加1”,所以后7位:0000010应该变为1111101 + 1 = 1111110(即126)  

又因为是负数,所以就截取变成-126了

 

我们再来看下-130的例子(符号位是1,其余按位取反+1)  
-130在内存中的表示形式:11111111 11111111 11111111 01111110  
这样截取后8位就变成01111110,显然这是整数啊,然后数值部分是126  
64+32+16+8+4+2=126 

 

 


http://chatgpt.dhexx.cn/article/hXpSovuw.shtml

相关文章

byte数组快速拷贝,byte数组合并,System.arraycopy详解

博客来源: 项目过程中用到byte[]数组相加问题,给出两个byte[] 需要合并成一个byte[]进行计算…那么需求来了……数据量达10W级,怎么合并 调用系统自带方法(System.arraycopy) 参考程序 org.junit.Test public void f…

程序、进程、线程的区别

程序、进程、线程的区别 进程是程序的实体,而线程又是进程的实体。进程又是线程的容器。 程序、进程、线程三者区别如下: 1.程序:程序并不能单独执行,是静止的,只有将程序加载到内存中,系统为其分配资源后才能够执…

操作系统-进程与线程的区别

操作系统-进程与线程的区别 1.什么是进程 简单的讲,进程是执行的程序,资源分配的最小单位。 进程包括:文本段(程序代码)、程序计数器的值、CPU寄存器的内容、堆、栈、数据段 进程的状态:新的、就绪、运行…

进程和线程的区别(重点)

来源:http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元&#xff0c…

进程与线程的区别和联系

程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种执行的程序称之为进程,也就是说进程是系统进行资源分配和调度的一个独立单位,每个进程都有自己单独的地址空间。所以说程序与进程的区别…

进程和线程的区别和联系

我们都知道计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。 进程 进程是一个具有一定独立功能的程序在一个数据集上的一次动…

进程与线程的区别及联系

目录 1. 操作系统功能简介 2. 进程 2.1 认识进程 2.2 进程操作系统中如何管理 2.3 PCB如何描述 2.3.1 pid 2.3.2 内存指针 2.3.3 文件描述符表 2.3.4 进程调度相关属性 3. 内存管理 4. 线程 4.1 认识线程 4.2 进程与线程的关系 4.3 线程安全问题 1.操作系统功能简…

Linux进程与线程的区别

进程与线程的区别,早已经成为了经典问题。自线程概念诞生起,关于这个问题的讨论就没有停止过。无论是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了。一般程序员而言,搞清楚二者的概…

win10安装时,提示“我们无法创建新的分区,也找不到现有分区”

win10安装时,提示“我们无法创建新的分区,也找不到现有分区”,如图所示: 解决办法: 将win10安装包(ios文件)解压,将以下文件复制到系统盘,然后重启电脑,自动…

我们无法创建新分区。【错误:0x80042468】

一台服务器6块1.8T SAS 10K,做RAID10. 安装windows server 2012R2系统在分区时报错,总有个分区不能创建成功。(正常安装系统后,磁盘管理也有一个磁盘不能创建新的分区) 提示“我们无法创建新分区。【错误:0…

重装系统“无法创建新的分区也找不到现有分区”

如题,一开始我使用分区工具对硬盘进行分区后再进入安装系统,一直出现这个问题报错。 (因我没拍照片,从网上找的图片,侵权请联系我) 后来我删除硬盘分区,直接在这里进行分区,就可以装了。如图&#xff0c…

解决无法创建新的分区,也找不到现有的分区。

注意:问题多发生在m2装系统(要拔出其他硬盘) 原创b站理想与天阳

关于windows安装过程中“我们无法创建新的分区,也找不到现有的分区”问题解决办法

最近在安装电脑系统过程中碰到了这个问题,首先说明下我电脑bios已经设置了uefi引导启动,硬盘分区格式也是GPT格式,还是出现这个问题有点纳闷,后面折腾了好久才找到解决办法: 即在对磁盘进行分区的时候不要创建ESP分区…

系统安装无法创建新的系统分区的解决方法

在安装Windows7时,想必有很多人都安碰到这样的情况吧!在安装界面里选择安装时,却出现“安装程序无法创建新的系统分区,也无法定位现有系统分区” 安装程序无法创建新的系统分区,也无法定位现有分区 网上提供的另外解决方法大全&a…

服务器系统安装提示无法创建新的系统分区,提示无法创建新的分区是怎么回事_安装win10系统无法新建分区的解决办法...

不少朋友在装win10的过程中,可能会遇到“我们无法创建新的分区,也找不到现有的分区”的提示,那么我们应该如何操作来解决此问题呢?下面就给大家讲解安装win10系统无法新建分区的解决办法。 安装win10系统无法新建分区的解决办法:…

Win10提示“无法创建新的分区也找不到现有的分区”

1 Win10提示“无法创建新的分区也找不到现有的分区” 由于公司电脑拷贝账户时,不小心,将原有的桌面文件夹直接替换,而不是将桌面内的文件替换,差生了诸多的问题: 我的电脑—打开后无法正常看到驱动器酷我无法切换歌曲…

启动盘安装windows系统时提示:“windows安装程序无法创建新的分区,也找不到现有分区”的解决方法

在使用启动盘安装Windows系统时有时会遇到无法安装的问题,选定主分区或新建主分区出现“windows安装程序无法创建新的分区,也找不到现有分区”的提示信息,导致安装失败。提示信息如下图所示: 出现这种问题就很头疼,我…

安装win10提示“我们无法创建新的分区,也找不到现有分区”的解决方法

用U盘安装操作系统,但是遇到了这种问题。——我是用微软官方工具制作的启动盘,因为是给M.2 NVME固态硬盘装win10,不能用pe。 虽然我用DiskGenius工具将硬盘格式化成GPT格式,但是安装时还是出问题。 出现这种情况可能是硬盘格式通…

win10:我们无法创建新的分区,也找不到现有的分区,

今日一朋友拜托我帮他笔记本升级安装win10。 加了一个内存条以后,就进入了安装win10的工作。 在选完我没有序列号,win10版本等等以后,一直跳出来的这个⚠信息挺烦人。(因手机没拍照片,从网上找到一张合适的,图片来源…