zoukankan      html  css  js  c++  java
  • 大类型向小类型转换

    -----------siwuxie095

       

       

       

       

    大类型向小类型转换:

    强转类型转换-简称 强转,或 显式类型转换

       

       

       

    Java在进行整数运算时默认是按照int类型处理的,因此 b+10 的结果

    是int类型的,虽然没有超过byte类型最大值,但仍要求 b+10 的结果

    赋值给字节类型变量时要做强制类型转换

       

       

    强转 的写法:用一对小括号,括号里是要转换类型的关键字,

    后面是转换的表达式

       

       

       

    Java对于像 5+10 这样明显的可以得出结果的字面量的运算,在编译时

    直接将 5 和 10 相加,如果结果没有超过字节类型的最大值,就没有错误

    即结果 15 在编译期间就保存在变量 b 中,无需类型转换

       

       

       

       

    强制类型转换时,要注意边界数风险问题

       

    具体含义:

    大类型向小类型转换时,有可能数据位成为小数的高位的符号位,

    也有可能超过小类型存储的最大值

       

       

    如:

    大类型转小类型时,源数据的数据位变为目标数据的符号位

       

       

    字节类型的最大值是 127,那么 129 存储在 b 中,肯定就不是 129 了

       

       

    将int类型(32位)的 129 转换为二进制,即:10000001

    (共 8 位,高位 24 位的 000… 省略

       

    而 byte类型只有 8 位,则 10000001,就变成了负数

       

    所有位取反:01111110,再加101111111,即 127

       

    所以 b 的最终结果是 -127

       

       

       

       

       

    再如:

    大类型的数据超过了小类型的位数

       

       

    定义int类型变量 i 赋值 257,如果将 i 的值强制转换为byte类型,保存在b 中

       

       

    将int类型(32位)的 257 转换为二进制,即:100000001

    (共 9 位,高位 23 位的 000… 省略

       

    而byte类型只能存 8 位,那么最高位的 1 将丢失掉,

    剩下:00000001,即 1

       

    即int类型 257 转换为byte类型后是 1

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    BZOJ2199[Usaco2011 Jan]奶牛议会——2-SAT+tarjan缩点
    BZOJ3862Little Devil I——树链剖分+线段树
    BZOJ2325[ZJOI2011]道馆之战——树链剖分+线段树
    BZOJ1018[SHOI2008]堵塞的交通——线段树
    BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并
    BZOJ4127Abs——树链剖分+线段树
    bzoj 4753 最佳团体
    bzoj 4472 salesman
    bzoj 5369 最大前缀和
    bzoj 1226 学校食堂Dining
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6535542.html
Copyright © 2011-2022 走看看