负数的进制表示(java笔记9)

本文详细解析了Java中复杂类型转换的过程,特别是从int到byte再到char的转换导致的结果,并解释了如何使用二进制表示负数。通过具体的例子说明了-1和-5等值的二进制形式及其背后的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**1.  “多重转型”问题


           

    System.out.println((int)(char)(byte)-1);
System.out.println((int)(char)(byte)1);

输出

  65535
  1

解析“多重转型”问题

     连续三次类型转换的表达式如下:(int)(char)(byte)-1

 1. int(32位) -> byte(8位)

   -1是int型的字面量,根据“2的补码”编码规则,编码结果为0xffffffff,即32位全部置1.转换成byte类型时,直接截取最后8位,所以byte结果为0xff,对应的十进制值是-1.

 2. byte(8位) -> char(16位)

   由于byte是有符号类型,所以在转换成char型(16位)时需要进行符号扩展,即在0xff左边连续补上8个1(1是0xff的符号位),结果是0xffff。由于char是无符号类型,所以0xffff表示的十进制数是65535。

 3. char(16位) -> int(32位)

   由于char是无符号类型,转换成int型时进行零扩展,即在0xffff左边连续补上16个0,结果是0x0000ffff,对应的十进制数是65535。

  • **2.    -5 如何用二进制表示
             取绝对值的二进制  ,取反加1
            5  ----     0000 0101  原码
            取反  1111 1010  反码
            加1       1111 1011  补码
            所以   1111 1011  就表示 -5 

**3.   1111 1011  对应十进制中的多少        【减一取反】
      首位是 1 ,故是负数
   减一           1111 1010
  取反           0000 0101      ---->  5
加负号
         所以答案是    -5

4负数表示

负数对应的正数的二进制-1,然后取反。

-6

0000-0000

0000-0000

0000-0000

0000-0110

6

1111-1111

1111-1111

1111-1111

1111-1001

取反

1111-1111

1111-1111

1111-1111

1111-1010

1

5.   负数的存储原理



6.  -128的由来



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值