【Java 面试合集】打印一个int整数的32位表示

打印一个int整数的32位表示

1. 概述

嗨,大家好【Java 面试合集】又来了,今天给大家分享的主题是打印一个int整数的32位表示.

2. 32位分析

2.1 为什么是32位呢

不知道看到这篇文章的各位是否都知道,一个int类型的表示方式就是32位呢??? 为什么呢

其实很简单啊,因为一个int的占4个字节, 而每个字节占8个比特位,所以就是32位了。

但是我们肉眼看到的都是十进制,比如:4, 10等,那么我们如果知道用32位怎么表示呢

public class Test001 {
    public static String print(int num) {
        String res = "";
        for (int i = 31; i >=0 ; i -= 1) {
            res += ((num & (1 << i)) == 0) ? "0" : "1";
        }
        return res;
    }
}

2.2 位运算&的分析

其实大家多多少都使用过位运算,但是&与运算有什么特点呢,就是满足同一位置上都是1的情况,就是1,反之就是0. 如下代码

// 0000 1101 0011
// 0000 1000 0000

// => 结果
// 0000 1000 000

所以只有满足同时为1的时候,结果才是1.

所以上述代码中 我们需要每一位都去&,才能得到最后的结果。

2.3 左移 << 讲解

其实我们都知道计算机底层都是按2进制运算的。所以左移其实就是将1向左移动n位(二进制值不变,但是位置一直左移),如下代码

// 1 << 0 00000000000000000000000000000001
// 1 << 1 00000000000000000000000000000010
// 1 << 2 00000000000000000000000000000100
// 1 << 31 10000000000000000000000000000000

我们可以发现,其实每次都将1左移动到对应的位置。

那么 8 << 3 这种怎么表示呢

其实可以理解为 (1 << 3) * 8. 所以结果就是64. 下列以此类推:

  • 22 << 4 => (1 << 4) * 22
  • 25 << 6 => (1 << 6) * 25

3. 特殊值的分析

System.out.println(print(Integer.MAX_VALUE)); // 01111111111111111111111111111111
System.out.println(print(Integer.MIN_VALUE)); // 10000000000000000000000000000000

虽然说int类型可以用32位来表示,但是其实真正可以使用的只有31位,因为第一个是符号位。如果第一位是0的话表示正数,反之如果是1的话,表示负数。

4. 反码以及补码

其实补码就是负数的表示形式。那反码以及补码如何表示呢

反码:就是二进制上每个位置的值都取反,就是反码
补码:就是反码的结果 + 1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值