www.rtmj.net > JAVA里int型强制转化成BytE型

JAVA里int型强制转化成BytE型

byte类型表示范围是-128~127,容量是256,用一个字节表示,int 是4个字节,int 化为byte只保留最后一个字节;我们可以把整型数化成2进制补码形式后分析最后八位(257->0000 0001)作为byte类型的二进制表示,byte的最高位是符号位,0表示正数,这里的结果化为真值用十进制表示就是1,若int类型是负数也可以进行同样操作,只不过最后补码转换为真值再换算成十进制稍微麻烦.

这个要用二进制来算,简单说一下,能理解多少看你的造化了.呵呵,其实你可以上网搜一下相关内容.在java中,int 占用2字节,byte 占用1字节.69用int的二进制表示为:00000000 01000101 ,87表示为:00000000 01010111,二者相加得:00000000 10011100,强转为byte,舍去高8位 ,得到 :10011100 ,如果是无符号数就是十进制:156,如果是有符号数就是 -100的补码表示形式.

因为java的byte类型只占一个字节,即2的8次方,表示的范围是0~127,128溢出了当做0,129为1,以此类推. 所以 257转换为byte后的值为:257-128-128=1 323转换为byte后:323-128-128=67

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 然后才能算出来表示的数值

public static void main(String[] args) { // TODO Auto-generated method stub int i = 65535; byte[] a = new byte[4]; a[0] = (byte) (0xff & i); a[1] = (byte) ((0xff00 & i) >> 8); a[2] = (byte) ((0xff0000 & i) >> 16); a[3] = (byte) ((0xff000000 & i) >> 24); //a 为转换

byte 是8位,即1个字节.取值范围为127 ~ -128.206二进制表示为11001110,最高位为1则为负数,取补加1后,十进制表示为-50

System.out.println( 12345678 & 0xff ) ;.

下面这个解答不是我写的,我也在看,还不是很明白,但这个解答是正确的:这个是编码方式决定的,Java中正数用源码表示,负数用补码表示,第一位是符号位.所以对于128和-129,他们的编码分别是:0000 0000 0000 0000 0000 0000

只取低8位,248是f8,没超过ff,还是f8比如0x1f1,是f1

一个byte是8位,一个int是16位,int转换成byte是将前(左)8位舍弃,留后8位.88+68=156,转换成int型2进制为0000000010011100,再强转成byte就是10011100,因为最高位为符号位,也就是表示正负的位,所以这里的1代表负数,剩下的按照原码、补码的规则换算回来就是100,所以是-100

网站地图

All rights reserved Powered by www.rtmj.net

copyright ©right 2010-2021。
www.rtmj.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com