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

**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的由来



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值