计算机中int、byte值转换分析,原码补码分析

计算机中int、byte值转换分析,原码补码分析

object Test07_TypeCast {
  def main(args: Array[String]): Unit = {
    // 将int值130强转为byte  值为多少

    // 0000 0000 1000 0010   => 表示int的130
    val i4 = 130

    // 1000 0010    =>  表示byte的130
    /**
      * 个人理解:
      * 1000 0010看起来像是-2,那么它是-2吗。此时只需要看一个数 1000 0000 是多少 难道是-0吗
      * 在微积分里面确实有-0和+0的一个区别,但是计算机达不到这个高度,没有我们想象中的那么厉害
      * 计算机的数学维度非常的低,他的数学水平相当于高中,它一点微积分都不会,他只能表示有限的数,不能表示无限
      * 所以-0在计算机里面没有意义,对于计算机来说-0就是0. 如果1000 0000表示-0的话,就和0000 0000这个数冲突了
      * 那么256个byte数就会少一个,所以在定义的时候计算机是不会把1000 0000当作一个-0的,还有一点,计算机比较笨,
      * 他的逻辑思维根本就不如我们,在我们的世界里面正数,负数非常明确,还有绝对值的概念。
      * 但是计算机他不行,他只有一个逻辑,那就是1比0大,因为计算机他就是底层的数字电路二进制组成的,在它眼里只有1和 0
      * 那它就认为1比0要大,所以它就认为1000 0001比1000 0000大,因为前者有个1,它就认为1比0大,它就这么一个脑子
      * 我们写的数1000 0010比它们两个都要大,就这样一直大下去会变成1111 1111,那他就是负数里面最大的数,
      * 可是负数里面最大的数是-1,那1111 1111就是-1;1000 0000就成了负数里面最小的数了,也就是-128
      * 所以1000 0010比1000 0000大2,那么1000 0010就是-126
      *
      * 官方的语言,1000 0010叫做补码;计算机在存负数的时候采用的是补码的方式
      * 我们再看补码的时候需要将补码转化为原码才表示它的一个数字
      * 补码转化成原码的方式  -1取反
      * 减一取反  减一的时候得到的是反码1000 0001,然后取反变成原码1111 1110(符号位保持不变)就是126
      * 原码转化成补码的方式  取反+1
      * 其实,若是琢磨一下,就会发现,这两个方法是一样的,先取反再加一和先减一再取反其实是一回事
      * 一个属1101取反就是0010,它两相加不就是全为1了吗
      * 那一个byte 它取反是什么意思呢,它取反相加就变成11111111也就是127了
      * 一个byte数取反就是拿127减这个数
      * 所以原码求补码  取反再加一 就是127-x+1也就是128—x
      * 那么补码求反码  先减一再取反就是127—(x-1)还是128-x
      *
      * 之后,拿128减它就可以了
      *
      */
    println(i4.toByte)
  }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值