int 转换成byte 数字

int转换为byte溢出怎么计算结果?如 int a=135 转换为 byte 要汉字描述

byte是1个字节 所以(字节型,占1 字节,表示8 位正整数,范围0 ~ 255)  
int是4个字节 而把int转换成byte会截取最后一个字节
比如你说的135 转为2进制应该有4个字节 然后仅仅要最后一个字节
最后一个字节的第一位被作为符号位135转换2进制后为10000111
然后按照 补码 计算规则看一下
把除了符号位之外 取反加1 变成11111001 这结果是-121

用256 减去 你所转换的数的绝对值 ,然后,加个符号(和做转换数相反的),就是结果????????

 

 

156 (int类型) 转byte为什么是-100

我算出来应该是-28
156=10011100B 转换为byte为11100B=-28

问题补充:

156=10011100B 最高位为符号位 而11100B=28 故为-28
156 =0 10011100B(第一个零位符号位,表示正,当然int型数值位前面还有N个0,略去) 
由于1byte为8bit 
所以转换为byte,符号位被丢弃(N个0也被丢弃), 
结果为1 0011100B(此时,第一位符号位为1,为负), 
由于负数按补码存储,所以转换为byte之后的真值为1 1100100(由补码求原码,按位取反末位加1),即-100
==============
lz前面都算对了,就差最后由负数的补码求真值,因为负数按补码存储,所以最后一步很关键

Java中int转byte问题

 

如  byte c1 = 46;
 byte c2 = 95;
 byte c3 = (byte)(c1 + c2);
 System.out.println("c3=" + c3);
输出结果为什么是 负100 老师说是int4个字节byte是一个字节去掉三个字节,余下哪个字节是多少就是多少。可是哪三个字节是怎么去的呢

/*
 95+46=141
 (00000000 00000000 00000000 ) 10001101
 128 8 4 1
 byte Max is 127.
 the first "1" is mark,so "10001101" is Complement Code.
 get:01110010
 =64 +32+ 16 +2=(-)114
 at Subtraction 1
 =-115 
 */
其实不能说是去掉3个字节,只能说在读取数据的时候只读取了最低的一个字节里的数据而已,那另外的3个字节还在 ,只是没有读取里面的内容而已

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值