例题:byte bb2 = (byte)-129;,问输出bb2的值是什么

    科技2025-04-09  14

    作为初学者,面对这种小题着实棘手,但在赵路通、秦子康同学的帮助下,让我搞懂了一点,但本人才疏学浅,有些不对的地方希望大家伙儿在评论区批评指正,互帮互助

    byte b5 = (byte)-129;System.out.println(b5);

    -129----int----负数----1000_0000_0000_0000_0000_0000_1000_0001原

    -129----int----负数----1111_1111_1111_1111_1111_1111_0111_1110反

    -129----int----负数----1111_1111_1111_1111_1111_1111_0111_1111补

    (byte)-129----byte----(舍弃)0111_1111补----正数----反、原

    输出为127


    首先在java中是有符号位的,即此二进制位的值是0则代表正数若是1则代表负数 需要掌握原反补码的知识 明确一点,遇到原码就要知道其在十进制是多少,例0000_0010原(2);1000_0010原(-2)等,遇到 反码、补码只需作为一个符号即可,我作为初学者没有继续深究下去,但要知道计算机底层存储的是补码 正数的原反补都一样 负数的原码:最高位是符号位,对其他的位进行本身绝对值即可----取十进制 负数的反码:符号位一定是1,其余位对原码取反 负数的补码:符号位一定是1,反码+1

    下面对上面的例题进行分析: 对于练习到这道题的朋友,相信已经学习过java的数据结构了 byte b5 = (byte)-129;

    -129是个int类型的负数,其原码的32个二进制位表现形式为1000_0000_0000_0000_0000_0000_1000_0001

    计算机要对其补码进行操作 先把原码“变为”反码,符号位是1,其余位取反

    -129是个int类型的负数,其反码的32个二进制位表现形式为 1111_1111_1111_1111_1111_1111_0111_1110

    在把反码“变为”补码,反码+1

    -129是个int类型的负数,其补码的32个二进制位表现形式为1111_1111_1111_1111_1111_1111_0111_1111

    (byte)-129,将int类型的的值强制转换为byte类型,就要把前面的位舍弃

    最后变为了 0111_1111

    由于最高位是0,表示是个正数,其原反补一样,最后就是十进制,为127

    完结,撒花

    Processed: 0.009, SQL: 8