数据类型转换

数据类型转换分为自动类型和强制类型转换

自动类型转换:通过自动可以看出,不需要人为的强加的干预,自动的进行的一种行为方式。
强制类型转换:通过强制可以看出,是需要人为进行干预的。

什么时候会出现上面描述的这种情况???

从内存当中看,当存储空间小的数据存储在存储空间大的时,可以放得进去;
当存储空间大的数据存储在存储空间小的,那么这种情况就得分为两种情况来进行研究。1、大容量小数据放进小容量中,小数据是没有问题的;2、大容量大数据放进小容量中显然是不可以的。

举例子来说明:

byte b = 125;
byte a = 12;
a = b;
// 这种情况是否可以?
// 看上去,这是相同的数据类型,只要是在这个数据类型的,显然都可以放进去
// 所以,相同的数据类型进行相互赋值的时候,不在考虑范围之内

我们需要研究的是同一种类型的进行相互转换。
这里的同一种类型指的有:整数的四大中,继承和接口实现这三大类
这里暂时只研究整数的情况。后续将研究面向对象当中的内容
整数类型四大类:byte,short,int ,long
byte:一个字节
short:两个字节
int:四个字节
long:八个字节
当byte转换到int的时候,显然是可以的。
当int类型转换到byte类型时候,这里可能会存在问题。着重研究这个

byte a = 12;
int b = 255;
a = b;
// 这里会发生什么情况???探究一个这个内容
// 补充一下,在计算机进行运算的时候,会采用补码的形式来进行运算,因为安全可靠
对于正整数来说,补码原码补码都是一样的;
对于负整数来说,遵循下面的原则
原码:数据转换成最原始的01数据
反码:除了原码的符号位,其余各位全部取反
补码:在反码的最右边的位置上+1

如:120

原码反码补码
011110000111100001111000

如-120

原码反码补码
111110001000011110001000
// 继续上面的探究内容
byte a = 1212对应的补码是:00001100
int b = 255255对应的补码是:00000000 00000000 00000000 11111111
当把b赋值给a时,会将b最右边的111111111放在a的内存空间当中去。但是这里就有了一个问题了。b将最后一个11111111字节放在里面的时候,11111111这个认为是原码还是补码呢??这里进行了测试,这里是将11111111当成了原码来进行处理。
原码:11111111
反码:10000000
补码:10000001
这里最终会是-1

在java中的移位原理同样也是如此。移位后的也会当成原码,然后转换,最后得到数据。例子:
int i = -153,左移两位

原码反码补码左移后
10000000 00000000 00000000 1001100111111111 11111111 11111111 0110011011111111 11111111 11111111 0110011111111111 11111111 11111101 10011100

这里的左移之后的二进制数据将会被当成是原码,最终解析成补码在计算机中存储。

原码反码补码
1111100010000000 00000000 00000010 0110001110000000 00000000 00000010 01100100

最终的数据是-612,这就是左移几位,乘以2的几次幂。

java中默认如果书写了一个整数,默认是int类型的。如果需要制定类型,需要手动添加。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值