JAVA打印数字二进制编码逻辑说明

news2024/12/22 17:59:57

在我们学习算法的过程中,我们首先必须要知道的就是数据(尤其是数字)类型在底层保存的方式。因为这样才能使我们的算法变的更加高效。

在JAVA中我们常用的数字类型是int类型,有过基础的同学应该知道int数据类型的长度为32bit。但实际使用时需要注意只有31位是数字,最高位为符号位(这里不展开讲了,有兴趣的同学可以自己学习一下原码,反码,补码,移码相关的基础知识)。采用二进制的方式保存数据,我们可以通过自己编写代码来展示int类型的数字底层是什么样的,代码如下:

public class Binary {
    // int类型转换32位二进制
    protected static void binary (int num) {
        for (int i = 31; i >= 0 ; i--) {
            System.out.print((num & (1 << i)) == 0 ? "0" : "1");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        binary(1);
    }
}

我们直接调用binary方法,就可以获取到一个int类型数字的二进制格式。

调用结果如下:

 有些同学在网上也可以找到学习视频,这篇文章主要是分享我对binary方法的分析,希望刚学习的小伙伴们能够有所收获,避免浪费较长时间在这里。

核心的代码内容只有两行。

 接下来我们一行一行的分析,小伙伴们也可以选择性阅读。

第一行

第二行

 更核心的逻辑就是第二行中的与运算与左移。我们来一个个介绍。

左移运算

将数字的底层二进制数据全部向左移动n位,右方空位由0补充

例如:

1的二进制结果为:

 1左移2位的结果为:

 我们可以简单认为,假设数字A左移n位就相当于A * 2^n

 最抽象的我认为还是与运算:

与运算(&)的基本逻辑为:

  • 1 & 1 = 1
  • 1 & 0 = 0
  • 0 & 0 = 0

所以num & (1 << i)这里的逻辑是这样的,我们假设num数字为200

当 i 为31时:

同样,当 i 为30时,同理结果如上:

 只有当 i 左移7位时:

此时结果为00000000000000000000000010000000,因为只有第7位的数据上下都是1,与运算后结果还是1,其他位结果为0,转换为10进制为128。

同理,当 i 左移6位时:

此时结果为00000000000000000000000001000000,转换为10进制为64。

所以说明int类型的数字200,底层的32bit的数据第32位为0,第31位为0,第7位为1,第6位为1,其他位的计算方式同理

正好就是数字200的二进制格式。

不知道这么说容易理解么,但是大家有问题我们可以私信交流~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/197516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11 |「哈希表」简析

前言 前言&#xff1a;刷「哈希表」高频面试题。 文章目录前言一、简介1、离散化1&#xff09;什么是离散化2&#xff09;离散化存储3&#xff09;离散化映射2、哈希表1&#xff09;什么是哈希表2&#xff09;哈希表存储3&#xff09;哈希函数4&#xff09;哈希冲突二、参考链接…

Python爬取网页Flex渲染的动态内容

我最近使用Python爬取网页内容时遇到Flex渲染的动态页面&#xff0c;比如下图的课程目录标题&#xff0c;此时按鼠标右键&#xff0c;菜单里没有复制链接的选项。 目的&#xff1a;获取各个视频标题、链接。 按F12进入开发者模式分析网页&#xff0c;可见有多个flex标签&#…

通用视觉框架OpenMMLab图像分类与基础视觉模型

文章目录流程传统方法&#xff1a;设计图像特征(1990s~2000s)特征工程的天花板从特征工程到特征学习层次化特征的实现方式AlexNet 的诞生& 深度学习时代的开始图像分类的数学表示AlexNet (2012)Going Deeper (2012~2014)VGG (2014)GoogLeNet (Inception v1, 2014)精度退化问…

ROS2 基础概念 动作

ROS2 基础概念 动作1. Actions2. 动作3. 中止目标4. 动作类型5. 动作请求1. Actions Actions 动作是ROS 2中的通信类型之一&#xff0c;适用于长时间运行的任务 它们由三部分组成&#xff1a;目标、反馈 和 结果&#xff0c;操作基于话题和服务 它们的功能类似于服务&#xff…

【大数据clickhouse】clickhouse 数据一致性保障常用解决方案

一、前言 对于任何一个数据存储的框架来说&#xff0c;确保数据的一致性都是其非常重要的组成部分&#xff0c;不管是过程中的强一致性&#xff0c;还是最终一致性&#xff0c;都是数据一致性的解决方案&#xff0c;本篇来聊聊clickhouse中的数据一致性问题。 二、clickhouse …

JMeter使用BeanShell断言

BeanShell简介BeanShell是使用Java语法的一套脚本语言&#xff0c;在JMeter的多种组件中都有BeanShell的身影&#xff0c;如&#xff1a;定时器&#xff1a;BeanShell Timer前置处理器&#xff1a;BeanShell PreProcessor采样器&#xff1a;BeanShell Sampler后置处理器&#x…

软件的生命周期(软件工程各阶段的工作)

其实软件工程是一个非常大的概念&#xff0c;我们的软件测试也好&#xff0c;软件开发也好&#xff0c;软件运维也好&#xff0c;其实都是属于软件工程的范畴。 今天就讲一讲软件工程和我们软件测试相关的一些内容。 我们今天三个主要的节点&#xff1a; 1.软件的生命周期 至…

QT中级(1)QTableView自定义委托(一)实现QSpinBox、QDoubleSpinBox委托

1 写在前面的话 我们在之前写的《QT(7)-初识委托》文章末尾提到&#xff0c;“使用一个类继承QStyledItemDelegate实现常用的控件委托&#xff0c;在使用时可以直接调用接口&#xff0c;灵活实现各种委托”。我们接下来几篇文章将先详细讲解各个控件的委托&#xff0c;最后整理…

怎么理解输入输出流 - 输入输出流之我解

背景 昨天领导开会&#xff0c;讨论两个接口之间参数问题&#xff0c;这个参数涉及文件传递的需求&#xff1b;其中一句话引起了我的思考&#xff1a;“参数怎么定义&#xff1f;能不能定义成字符流&#xff1f;” 当时我沉思了一下&#xff0c;懵的 没明白她的意思 我理解的比…

swagger2接口文档

文章目录简介Open APISwagger简介Spring-fox入门案例第一步&#xff1a;导入依赖第二步&#xff1a;编写controller类第三步&#xff1a;编写启动类第四步&#xff1a;运行启动类并访问ui页面Swagger UI 介绍基础信息配置自定义注解&#xff08;防止有些类不生成接口文档&#…

数据结构:数组及特殊矩阵

数组及特殊矩阵一、认识数组1️⃣ 定义2️⃣ 存储结构1. 一维数组2. 二维数组二、特殊矩阵的压缩存储1️⃣ 对称矩阵&#x1f4a4;思考1&#xff1a;有多少个二维元素A[0...n-1][0...n-1]存于一维元素中❓&#x1f4a4;思考2&#xff1a;按行排列&#xff0c;二维数组A[0...n-1…

198分成功上岸浙江工业大学MBA的备考经验分享

我是2022年刚被浙江工业大学MBA项目录取的一名新生&#xff0c;新的一年管理类联考备考已经开始&#xff0c;最近身边有很多小伙伴也都在咨询这方面的信息&#xff0c;趁着今天有空给大家分享下我的经验。 在备考开始之前首先要确定目标&#xff0c;因为工作在杭州&#…

【正点原子Linux连载】第四章 SDK包的使用 摘自【正点原子】ATK-DLRV1126系统开发手册

1&#xff09;实验平台&#xff1a;正点原子RV1126 Linux开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692176265749 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第四章 S…

学习周报-20230203

文章目录一 在rhel7系统使用Mariadb一 联系和区别二 需求三 部署安装3.1 环境准备3.2 安装软件包3.3 启动服务3.4 设置防火墙策略四 创建用户和库表4.1 登录数据库4.2 创建用户4.3 创建数据库和表五 备份和恢复5.1 备份 com 数据库5.2 模拟误删除操作5.3 恢复表二 使用grep忽略…

如何建立异形板框的内缩和外扩

如何建立异形板框的内缩和外扩 首先把需要内缩和外扩的外形图设置在信号层&#xff08;比如TOP&#xff09;&#xff0c;把线宽改为0mil&#xff08;方便计算&#xff09;。然后选择外形图&#xff0c;执行命令TJ&#xff0c;就可以得到内缩和外扩图形。然后把生成的图形修改到…

Linux-查找文件、软链接、打包压缩和软件安装

查找文件find软链接ln打包和压缩tar软件安装apt-get1.查找文件find命令功能强大&#xff0c;通常用来在特定的目录下搜索符合条件的文件序号命令作用01find[路径] -name"*.py"查找指定路径下扩展名是.py的文件&#xff0c;包括子目录如果省略路径&#xff0c;表示在当…

最新整理Spring面试题2023

Spring面试专题 1.Spring应该很熟悉吧&#xff1f;来介绍下你的Spring的理解 有些同学可能会抢答&#xff0c;不熟悉!!! 好了&#xff0c;不开玩笑&#xff0c;面对这个问题我们应该怎么来回答呢&#xff1f;我们给大家梳理这个几个维度来回答 1.1 Spring的发展历程 先介绍…

【C++入门】引用详解(引用的特性、引用的使用、引用与指针的区别)

文章目录1 引用概念2 引用特性3 使用场景4 常引用5 传值与传引用的效率比较5.1 值和引用作为函数参数的性能比较5.2 值和引用作为返回值类型的性能比较6 引用和指针的区别1 引用概念 引用不是新定义一个变量&#xff0c;而是给已存在的变量取了一个别名&#xff0c;编译器不会为…

浅谈网络流

网络 网络是一张单向图 , 每条边都有一个权值 c(u,v)c(u,v)c(u,v) 表示边 (u,v)(u,v)(u,v) 的容量. 特别的 , 图上有源点 (s)(s)(s) 和汇点 (t)(t)(t). 网络流 在一张网络上 , 从源点流出 , 最终流入汇点的流. f(u,v)f(u,v)f(u,v) 表示 (u,v)(u,v)(u,v) 的流量. 满足 : 容…

【测试总结系列-1】质量保障之测试左移和右移

在开发一个系统或者说软件&#xff0c;需求分析、软件设计、程序编码、软件测试、运行维护&#xff0c;这些阶段必不可少。整个周期中&#xff0c;作为测试人员&#xff0c;不是只在测试阶段才能发挥作用&#xff0c;也不是仅有测试对软件质量负责&#xff0c;一个项目团队&…