随笔之java基本数据类型强制类型转换原理

随笔之java基本数据类型强制类型转换原理

例题:经过强制类型转化后,变量a,b的值分别是();
short a = 128; byte b = (byte) a;
答:a= 128;b= -128;

1.java中用补码形式表示。
2.第一位正负位,1表示负,0表示正。
3.原码:一个数的二进制表示。
4.反码:负数原码按位取反(符号位不变),正数原码本身。
5.补码:正数的原码本身,负数反码加1.

如:
3的原码 00000011 -3的原码 10000011
3的反码 00000011 -3的反码 11111100
3的补码 00000011 -3的补码 11111101

例题分析:
int占4个字节,32位;byte占1个字节,8位;所以强转时会截断前24位。(在内存中java是以补码表示一个数,所以表示形式是补码,不是原码)

int a=3 二进制补码表示:00000000 00000000 00000000 00000011
byte b=3 二进制补码表示:00000011
int a=-3 二进制补码表示: 11111111 11111111 11111111 11111101
byte b=-3 二进制补码表示: 11111101 原码:1000011

则int 128 转换为byte,
强转截取前补码(或原码):00000000 00000000 00000000 10000000
强转截取后补码: 10000000(即byte类型的补码)反码11111111 原码10000000
(注:byte在内存中一个字节范围是-128到127之间,对应原码11111111到01111111之间,在计算机中0有两种表示0000 0000和-0为1000 0000,为了充分利用资源1000 0000就表示-128

总结:
1.已知负数补码,求负数:补码-1=反码,反码按位取反(除符号位);
2.已知负数,求负数补码:
i)按位取反(除符号位),加1
i))负数绝对值,按位取反(含符号位),加1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值