位运算及如何将一个十进制数转化为二进制数

本文详细介绍了Java中的int类型,包括其32位二进制表示及范围,从-2^31到2^31-1。同时,探讨了位运算中的左移和右移操作,以及如何通过位运算将十进制数转化为2进制并打印。此外,提供了代码示例来演示这些概念。
摘要由CSDN通过智能技术生成

【1】Java中int类型介绍

  • 首先从Java中的int整型说起,int变量占4个字节,一个字节8位,那么int就占32位即从0位到31位。
    然后在java中是没有 无符号位 的数,那么在0位到31位中,31位表示符号位,其余的表示数值。

  • 那么int整型的表示的范围是多少呢?
    大家在csdn一搜发现是 2的-31次方到 2的 31次方减1 那么是为什么呢?
    首先由于31位是符号位 0 表示正 1表示负
    那么int的最大值 的二进制 即 011111.。。。。11111 也就是2的31次方-1
    那么负数的最小值呢?
    这里有个规定:负数的表示规则是 符号位 为1 其余位 取反 加 1 (这里都是二进制的)

举例:-5的二进制
那么5的32位的二进制为:00000000000000000000000000000101
那么-5的32位的二进制先让符号位为1然后后面的全部取反 即为:11111111111111111111111111111011

那么负数的最小值即为正数的最大值的相反数 也就是 -2的31次方-1
2的31次方-1:01111111111111111111111111111111
对它取反加1:10000000000000000000000000000000
因此在int整型了 它的最小值 为负的2的31次方

【2】Java中位运算

  • 左移运算:value<<num
    1)数值value向左移动num位,左边二进制位丢弃,右边补0。(注意byte和short类型移位运算时会变成int型,结果要强制转换)
    2)若1被移位到最左侧,则变成负数。
    3)左移时舍弃位不包含1,则左移一次,相当于乘2。
  • 右移运算:value>>num
    1)数值value向右移动num位,正数左补0,负数左补1,右边舍弃。(即保留符号位)
    2)右移一次,相当于除以2,并舍弃余数。
    3)无符号右移>>>:左边位用0补充,右边丢弃

【3】如何将十进制数转化为2进制数打印出来

思路:用 与 & 运算实现
与 & 运算原理:只有 两个1 相遇才会是1 其余都为0。
在进行 与运算时,先将十进制数转换为2进制数 然后就行比较。
因此下面用一个for循环从1左移31位 依次左移30位 左移29位 一个一个的与 num比较
举例 假如1左移10 位是 1024 那么在进行与运算时,先换成2进制即 1 0000 0000 00 然后与num换成2进制比较
只有当num的二进制在10位值是1的时候,才打印出来1 否则为0
因此循环32次 将0位置到31位置 都与 num的二进制位置比较 即可 打印出 num的 2进制

  • 代码:
public class Code06_PrintB {

    /*
     * 将一个十进制数输出为32位状态的2进制:
     * 【注】int类型占4个字节,一个字节八位,那么int占32位
     * 思路:用 与 & 运算实现
     * 与 & 运算原理:只有 两个1 相遇才会是1  其余都为0。在进行 与运算时,现将十进制数转换为2进制数 然后就行比较。
     * 因此下面用一个for循环从1左移31位 依次左移30位 左移29位   一个一个的与 num比较
     * 举例 假如1左移10 位是 1024 那么在进行与运算时,先换成2进制即 1 0000 0000 00 然后与num换成2进制比较
     * 只有当num的二进制在10位值是1的时候,才打印出来1 否则为0
     * 因此循环32次 将0位置到31位置 都与 num的二进制位置比较 即可 打印出 num的 2进制
     * */
    public static void print(int num) {
        for (int i = 31; i >= 0; i--) { //循环32次
            System.out.print((num & (1 << i)) == 0 ? "0" : "1");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int test = 10;
        print(test);
        int a = Integer.MAX_VALUE;
        int c = Integer.MIN_VALUE;
        print(a);
        print(c);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值