Scala语言学习-01-高精度类型向低精度类型转换分析

一、测试环境

名称版本
操作系统Red Hat Enterprise Linux Server release 7.9 (Maipo)
CPU12th Gen Intel® Core™ i7-12700H
内存5G
JDK1.8.0_171
Scala3.1.2

二、测试代码

object TestDataTypeConvert {
    def main(args: Array[String]): Unit = {
        val T_Int: Int = 130
        val T_Byte: Byte = T_Int.toByte
        println(s"${T_Byte}")
    }
}

三、编译执行

[root@node0 src]# scalac TestDataTypeConvert.scala -d ../test/
[root@node0 test]# cd /opt/scala_test/test
[root@node0 test]# scala TestDataTypeConvert
-126

四、问题

数据类型描述
Byte8位有符号补码整数。数值区间为 -128 到 127
Int32位有符号补码整数。数值区间为 -2147483648 到 2147483647

Int 类型数据130转换成Byte类型数据,超出Byte类型数据长度,结果变为-126。

五、情况分析

(0)Int 类型数据130转换成二进制数据,以下为转换过程:
130 / 2 = 65 --- 0
65  / 2 = 32 --- 1
32  / 2 = 16 --- 0
16  / 2 = 8  --- 0
8   / 2 = 4  --- 0
4   / 2 = 2  --- 0
2   / 2 = 1  --- 0
1   / 2 = 0  --- 1

(1)int类型数据130对应二进制数为:0000 0000 0000 0000 0000 0000 1000 0010

(2)byte为8位,只需要取32位的最后8位,进行截断后为:1000 0010

(3)再去取补码,负数取补码为符号位不变取反加一:
1000 0010
|
|取反
|
1111 1101 
|
|加一
|
1111 1110

(4)1111 1110的第一位符号位为符号位,1为负,0为正,这里第一位为1为负数,111 1110取对应的十进制数据

(5)计算过程
1111 1110
|
|
|
-1 * (0*2^0 + 1*2^1 + 1*2^2 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^6) 
|
|
|
-1 * (0 + 2 + 4 + 8 + 16 + 32 + 64) 
|
|
|
-126
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值