「javaint转字节」javaint转short

博主:adminadmin 2023-03-20 05:28:09 1112

本篇文章给大家谈谈javaint转字节,以及javaint转short对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA中int强制转换byte

int 是32位 4个字节 8位1字节

int转换成byte 前面的3个字节 即24位 直接砍掉 就剩最后一位

所以 266 ——(00000000)(00000000)(00000001)(00001010)

== 0001010 = 1* 2 + 1 *2*2*2 = 10

最开始的0 表示是正数

如果是1表示负数 还要先按位取反再加1 然后才能算出来表示的数值

Java怎么实现把int[]数组转换为byte[]数组

int i[] = {1,2,3};

byte b [] = new byte[3];

for (int c : b) {

    b[c] = (byte)i[c];

}

Java中int数据类型转byte类型,int数为-129,答案尽可能详细

int 是4字节的, 用补码存储

-129: 原码: 1000 0000, 0000 0000, 0000 0000, 1000 0001

反码: 1111 1111, 1111 1111, 1111 1111, 0111 1110

补码: 1111 1111, 1111 1111, 1111 1111, 0111 1111

转成byte后, 高的3个字节就被舍弃了, 剩最低的一个字节

也就是 0111 1111

十六进制为 7f

无符号10进制为 127

有符号10进制也是 127

Int强转字节遇到的问题

我们都知道,Java中有8种基本数据类型,每种类型都有取值范围,比如1字节的byte取值范围是[-128~127],4个字节的int取值范围 [-2^31~2^31-1] 。因为能表示的值的范围不同,如果我们将int类型强转为byte类型的话,是很可能丢失精度的。比如:

一个字节占用8个长度,就是指一个字节占用了八个比特的长度,也就是八个二进制位。我们这里先以十进制256位例:

将4字节的int类型转换成单字节byte,最高位的三个字节的存储单元将会被舍弃掉,这才是损失精度的要义所在!所以,根据上图高位舍弃的强转后,你自己也可以看出来,最后得到的byte十进制表示数字为0。嗯,似乎也就那么回事,还是很好理解。但是,我们换成128试试?

128强转后,按照高位舍弃理论,无非是舍弃掉了高字节位无意义的24个0而已,最后的byte字节表示的还是原来那么大,还应该是128才对,为什么实际程序运行的结果却变成了-128?其实,是因为,Java的数据是带符号位的。你知道二进制中如何表示一个数的正负吗?对于有符号的二进制来说,为了区分数的正负,约定以最高位作为符号位, 0表示正数,1表示负数 ,除去符号位剩下的就是这个数的绝对值部分:

我们带上符号位,回过头来重新分析上面对128的强转;当高位的三个字节被舍弃掉之后,连同舍弃的还有它的符号位0,最终的结果就是强转成单字节后,原理表示数值部分的1变成了符号位,表示为负,除去符号位,能表示值的就只有后7位的0000000了。这样表示的十进制值为-0,在带符号的二进制中,-0被规定用来指代-128,+0才表示0。看来,只要带上符号位,本文最开始的输出结果是很好分析的。但是,有了符号位,这里又有疑问了,如果符号位占据了字节高位,当我们在进行算法运算的时候,符号位又该如何处理呢?

相对应的二进制位同为 1 结果才为 1,否则都是 0,形如:

利用这个特性,我们判断奇偶数就可以不用再传统的 n%2的方式了,直接用 n1,结果为 1 就是奇数,为 0 就是偶数。why? 因为 0或正数,补码和原码相同,由于 1 的前 n 位都是 0 ,与 1 相与,结果肯定是 0 ,我们只关心最后一位,奇数肯定是 1,1与1相与结果为1;若为负数,原码转反码时,奇数最后一位由 1 变 0,但转补码后有加 1 操作,末尾为 1 ,判定同理。

相对应的二进制位只要有一个为 1 ,结果即为 1,形如:

相对应的二进制位数字不同,结果为 1 ,否则都是 0 ,形如:

异或有个特性就是,任何数与 0 异或,结果都是其本身。利用这个特性,可用于数的交换,以此可以解决一些面试刁难:如何在不采用临时变量的情况下实现两个数的交换?

二进制位按位取反,0 变 1 ,1 变 0 。

形如 ab,将 a 的各二进制位整体向左移 b 位,高位溢出位移出,低位补 0。在数值没有溢出的情况下,左移n位相当于乘 2 的n次方。例如 23,即由二进制的 00000010 变成了 0010000,相当于 2 乘 2 的 3 次方,结果为 16。因为位运算是 CPU 直接支持的,这也就是上面提到的 2*8 最有效率的运算方法了。

形如 ab ,原理同左移,只不过由于符号位在最高位,所以,如果右移的是负数,会在高位补 1 ,如果为正数,高位补 0

与右移唯一的不同在于,不论原来最左边是什么数,移动后都在高位补 0。注意,没有无符号左移, 因为左移始终是在右边补 0 ,而符号位在左边,不存在补符号位的问题。

java中怎么将一个int转成高位在前的byte

一个byte是8位,一个int是16位,int转换成byte是将前(左)8位舍弃,留后8位。

88+68=156,转换成int型2进制为0000000010011100,再强转成byte就是10011100,因为最高位为符号位,也就是表示正负的位,

所以这里的1代表负数,剩下的按照原码、补码的规则换算回来就是100,所以是-100!

java中int转换byte型

下面这个解答不是我写的,我也在看,还不是很明白,但这个解答是正确的:

这个是编码方式决定的,Java中正数用源码表示,负数用补码表示,第一位是符号位。

所以对于128和-129,他们的编码分别是:

0000 0000 0000 0000 0000 0000 1000 0000

1111 1111 1111 1111 1111 1111 0111 1111。

对于a来说,1000 0000是负数(第一位为1),它的绝对值是1000 0000即128,

而对于b来说,0111 1111是正数,值为127。

————————————————————————————————————

0 00000000

1 00000001

... ........

127 01111111

----------------

共 128 个

-1 11111111

-2 11111110

... ........

-128 10000000

----------------

共 128 个

我们都知道byte占8位。而2的8次方等于256,也就是byte最多可以表示256个不同的数,

0~127:128个

-0~127:128个

但是这里0与-0表示一样的数了,所以就用-0的二进制补码表示到-128里面去了

javaint转字节的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于javaint转short、javaint转字节的信息别忘了在本站进行查找喔。