首页

文章

byte与int的转换

发布网友 发布时间:2022-04-19 15:15

我来回答

1个回答

热心网友 时间:2023-10-25 09:08

在剖析该问题前请看如下代码public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i < b.length; i++) { String hex = Integer.toHexString(b[ i ] & 0xFF); if (hex.length() == 1) { hex = 0 + hex; } ret += hex.toUpperCase(); } return ret;}上面是将byte[]转化十六进制的字符串,注意这里b[ i ] & 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串,可以看出b[ i ] & 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不行吗?答案是不行的.其原因在于:1.byte的大小为8bits而int的大小为32bits2.java的二进制采用的是补码形式在这里先温习下计算机基础理论byte是一个字节保存的,有8个位,即8个0、1。8位的第一个位是符号位, 也就是说0000 0001代表的是数字1 1000 0000代表的就是-1 所以正数最大位0111 1111,也就是数字127 负数最大为1111 1111,也就是数字-128上面说的是二进制原码,但是在java中采用的是补码的形式,下面介绍下什么是补码1、反码: 一个数如果是正,则它的反码与原码相同; 一个数如果是负,则符号位为1,其余各位是对原码取反;2、补码:利用溢出,我们可以将减法变成加法 对于十进制数,从9得到5可用减法: 9-4=5 因为4+6=10,我们可以将6作为4的补数 改写为加法: 9+6=15(去掉高位1,也就是减10)得到5. 对于十六进制数,从c到5可用减法: c-7=5 因为7+9=16 将9作为7的补数 改写为加法: c+9=15(去掉高位1,也就是减16)得到5. 在计算机中,如果我们用1个字节表示一个数,一个字节有8位,超过8位就进1,在内存中情况为(100000000),进位1被丢弃。 ⑴一个数为正,则它的原码、反码、补码相同 ⑵一个数为负,刚符号位为1,其余各位是对原码取反,然后整个数加1 - 1的原码为 10000001- 1的反码为 11111110 + 1- 1的补码为 111111110的原码为 000000000的反码为 11111111(正零和负零的反码相同) +10的补码为 100000000(舍掉打头的1,正零和负零的补码相同)Integer.toHexString的参数是int,如果不进行&0xff,那么当一个byte会转换成int时,由于int是32位,而byte只有8位这时会进行补位,例如补码11111111的十进制数为-1转换为int时变为11111111111111111111111111111111好多1啊,呵呵!即0xffffffff但是这个数是不对的,这种补位就会造成误差。和0xff相与后,高24比特就会被清0了,结果就对了。----Java中的一个byte,其范围是-128~127的,而Integer.toHexString的参数本来是int,如果不进行&0xff,那么当一个byte会转换成int时,对于负数,会做位扩展,举例来说,一个byte的-1(即0xff),会被转换成int的-1(即0xffffffff),那么转化出的结果就不是我们想要的了。而0xff默认是整形,所以,一个byte跟0xff相与会先将那个byte转化成整形运算,这样,结果中的高的24个比特就总会被清0,于是结果总是我们想要的。
变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 如何将byte数组转换成浮点数? 字节、kb、mb等单位,是怎样换算的? C#如何把BYTE数组中的数转换成16进制 如何把一个byte数组的数字转换成int C#中怎样把byte数组转换成数字 vb 如何把串口通信接收到的byte转换成数值 byte类型怎么转成byte数组 一个字节等于多少二进制数? 厕所被鱼渣子堵了怎么疏通 我家厕所是由于一条一斤左右的鲫鱼给蹲便器下水道... 鱼掉进厕所怎么办? 鱼掉厕所把马桶堵了,怎么办 鱼堵厕所下水道了,什么腐化的快 蹲式马桶掉进一条鱼堵了怎么办? 有什么办法让堵在下水道的鱼尽快腐烂掉 鱼堵厕所了如何快速腐烂 马桶被鱼堵住了怎么办? 马桶被鱼堵住了,如何让鱼腐烂 半斤多的鲫鱼掉进蹲便器堵住了怎么才能把鱼整出来... 鱼掉入蹲便器,堵了,用什么可以把鱼立马烂掉冲走 java中如何将byte[]里面的数据转换成十六进制 java中如何将byte[]里面的数据转换成十六进制? 如何将byte转为十进制字符串 c#怎样将byte转为十六进制 一个byte[8]数组转成数字最大能表示多大的数 java 如何将byte[4]数组转换成一个int型数据? BYTE数据怎么转化成二进制字符串 java里面byte数组和String字符串怎么转换 求方法.怎么把byte类型的数组转换成NS 华为手机怎么校准电池 华为手机电池指示不准怎么办 吃什么食物会产生兴奋 吃什么东西会让人兴奋,精神好啊? 吃什么能兴奋增加爆发力? 哪种食物可以使人兴奋 吃什么东西会让人兴奋,精神好 吃什么能让男人很快兴奋 急 吃什么东西能让大脑快速兴奋起来 ? 吃什么药能让人兴奋起来? 吃什么能兴奋。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com