• short a = 128, byte b = (byte)a 强制类型转换


     1 package 笔试;
     2 
     3 public class ShortToByte {
     4 
     5     /**
     6      * @param args
     7      */
     8     public static void main(String[] args) {
     9         // TODO Auto-generated method stub
    10             short a=128;
    11             byte b=(byte)a;
    12             System.out.println("short强制类型转换为byte时,a="+a+","+b);
    13             byte a1=(byte)128;
    14             byte b1=(byte)(-129);
    15             System.out.println("int强制类型转换为byte时,a1="+a1+",b1="+b1);
    16     }
    17 
    18 }

    执行结果为:short强制类型转换为byte时,a=128,-128
    int强制类型转换为byte时,a1=-128,b1=127

    跟计算机的数据表示格式有关:负数用补码表示。

    byte类型的数据取值范围是:-128-127,
    例如:byte a=(byte)128;
      byte b=(byte)(-129);
    a和b得值分别为-128和127.
    这个是Java编码方式决定的,Java中正数用源码表示,负数用补码表示,第一位是符号位。
    
    所以对于128和-129,他们的编码分别是:
    0000 0000 0000 0000 0000 0000 1000 0000
    和1111 1111 1111 1111 1111 1111 0111 1111。
    使用强制类型转换之后得到的a和b分别是1000 0000和0111 1111。
    对于a来说,1000 0000是负数(第一位为1),它的绝对值是1000 0000即128,
    而对于b来说,0111 1111是正数,值为127。 强制转换的截位本身就带来数据的损失,所以出来的结果比较怪也是正常。
  • 相关阅读:
    c++的const总结
    http框架--Forest 的使用
    SQL 语句大全
    Mysql 总结
    【Spring注解驱动开发】使用@Scope注解设置组件的作用域
    注册中心EUREKA(二)--配置列表
    Linux命令发送Http GET/POST请求
    真正理解NIO
    高并发下接口幂等性解决方案
    代码量统计工具
  • 原文地址:https://www.cnblogs.com/sara-gcj/p/3316648.html
Copyright © 2020-2023  润新知