计算机基础原理之:十进制和二进制互转逻辑

· 浏览次数 : 0

正文

最近在重温计算机基础原理这些基础信息,目前重温到不同进制的数据,做个记录。

  • 10进制转2进制逻辑:
    • 01001111,这个是个8位的二进制数据,10进制的数据为:79,计算方法如下:
    • 从右到左算,有1的就加,为0的跳过 : 2^6 + 2^3 + 2^2  + 2^1 + 2^0 = 79
  • 2进制转10进制逻辑:
    •   十进制数 123 :
    •       (123 ÷ 2 = 61) 余 (1)
    •       (61 ÷ 2 = 30) 余 (1)
    •       (30 ÷ 2 = 15) 余 (0)
    •       (15 ÷ 2 = 7) 余 (1)
    •       (7 ÷ 2 = 3) 余 (1)
    •       (3 ÷ 2 = 1) 余 (1)
    •       (1 ÷ 2 = 0) 余 (1)

除到商为0就停止,可以理解成循环条件结束。

以上逻辑都可以拿代码中的循环和数组实现,逻辑代码很简单,一开始想用c来实现,但是写了一下很变扭,后面放弃了,主要是不太熟悉c。

最后还是用java来实现方便点,不用造轮子的快乐。😁😁😁

package com.oceanbase.test;
import java.util.ArrayList;
import java.util.Collections;

/**
 * @Auther: yuzj
 * @Date: 2024/7/23 - 07 - 23 - 7:39
 * @Description: org.test
 * @version: 1.0
 */
public class BinaryConversion {
    private static final ArrayList<Long> bitMapDecimalPom = new ArrayList<Long>();
    static {
        for (int i = 32-1; i >= 0; i--) {
            bitMapDecimalPom.add(new Double(Math.pow(2,i)).longValue());
        }
    }
    private static char[] bitStringToChar(String bit32string) throws Exception {
        char[] bit32charArray = bit32string.toCharArray();
        if (bit32string.length() > 32) {
            throw new Exception("bitStringToChar 函数传入的 bit32string 参数长度超过32位");
        }
        for (char c : bit32charArray){
            if (c != '0' && c != '1') {
                throw new Exception("bit32charArray 参数内容有0和1以外的数据");
            }
        }

        return bit32charArray;
    }

    // bitToDecimal方法主要作用是:2 进制转换成 10 进制
    private static Long bitToDecimal(String bit32string) throws Exception {

        Long DecimalNum = 0l;
        // 传进来的二进制字符串转换成 char 数组
        char[] bit32Chars = bitStringToChar(bit32string);
        // bit32CharsLength 为 bit32Chars 数组 的长度
        int bit32CharsLength = bit32Chars.length;
        for (int i = bitMapDecimalPom.size() -1 ; i >= 0; i--) {
            if (bit32Chars[bit32CharsLength-1] == '1'){
                DecimalNum = DecimalNum + bitMapDecimalPom.get(i);
            }
            // bit32Chars 从右到左偏移
            bit32CharsLength = bit32CharsLength - 1;

            // bit32Chars 从右到左偏移,索引到0就结束循环
            if (bit32CharsLength == 0){
                break;
            }
        }
        return DecimalNum;
    }


    // DecimalToBit:10 进制 换成 2 进制转
    private static String DecimalToBit(Integer Decimal32int) throws Exception {

        // 先定义一个数组
        ArrayList<String> DecimalArr = new ArrayList<String>();

        //这里逻辑 如果传入 123 就赋值到 DecimalModNum
        Integer DecimalModNum = Decimal32int;
        Integer modNum        = null;
        if (Decimal32int > Integer.MAX_VALUE ){
            throw new Exception("DecimalToBit 方法传入 bit32int 参数大于 2147483648");
        }

        // 如过DecimalModNum不等于0还继续循环
        while (DecimalModNum != 0){

            // DecimalModNum 假如是 123 ,然后就 123 对 2 取余 1 放到 modNum,然后把取余值丢入 DecimalArr
            modNum = DecimalModNum % 2 ;
            DecimalArr.add(modNum.toString());

            // 然后 123➗2 等于 61整数结果,继续拿结果来÷2,除到0为止。
            DecimalModNum = DecimalModNum /2 ;
        }

        // 将取余的值翻转
        Collections.reverse(DecimalArr);

        StringBuilder stringBuilder = new StringBuilder();


        for (String s :DecimalArr){
            stringBuilder.append(s);
        }

        return stringBuilder.toString();

    }

    public static void main(String[] args) throws Exception {
        // 10进制转换成2进制
        String bitNum = DecimalToBit(999);
        System.out.println("999 转换成2进制:" + bitNum);

        System.out.println("");

        // 2进制转换成10进制
        Long DecimalNum = bitToDecimal(bitNum);
        System.out.println("1111100111 转换成10进制:" + DecimalNum);


    }

}

 

与计算机基础原理之:十进制和二进制互转逻辑相似的内容:

计算机基础原理之:十进制和二进制互转逻辑

最近在重温计算机基础原理这些基础信息,目前重温到不同进制的数据,做个记录。 10进制转2进制逻辑: 01001111,这个是个8位的二进制数据,10进制的数据为:79,计算方法如下: 从右到左算,有1的就加,为0的跳过 : 2^6 + 2^3 + 2^2 + 2^1 + 2^0 = 79 2进制转1

【工程应用十】基于十六角度量化的夹角余弦相似度模版匹配算法原理解析。

传统的基于边缘信息的匹配算法有着大量的浮点计算,在某些硬件条件下不友好,通过对公式进行分析,传统算法的匹配度公式可以转换为求解角度差异的余弦值,而进一步的进行量化和定点化后,则可以转化为查找一个整形数据的二维或一维表,从而加快算法的查找速度。

云小课|MRS基础原理之Hudi介绍

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 摘要:Hudi是数据湖的文件组织层,对Parquet格式文件进行管理提供数据湖能力,支持多种计算引擎。 本文分享自华为云社区

云小课|MRS基础原理之Flink组件介绍

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 摘要:Flink是一个批处理和流处理结合的统一计算框架,其核心是一个提供了数据分发以及并行化计算的流数据处理引擎。它的最大亮

认识CPU底层原理(1)——MOSFET

本文为B站UP主硬件茶谈制作的系列科普《【硬件科普】带你认识CPU》系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除 近年来,由于国内外各种因素影响,半导体行业逐渐被推向风口浪尖,这时人们才认识到,作为早已宣称进入信息化和数字化时代的中国,在计算机基础设施建设上是如此薄弱。 计算机基础

Netty(1)——NIO基础

本篇主要介绍Java NIO的基本原理和主要组件 Netty是由JBOSS提供的Java开源网络应用程序框架,其底层是基于Java提供的NIO能力实现的。因此为了掌握Netty的底层原理,需要首先了解Java NIO的原理。 NIO简介 计算机主要由CPU、内存、外存、IO设备等硬件组成,计算机执行

从图灵机到量子计算机,计算机可以解决所有问题吗?

本文已收录到 GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群。 前言 大家好,我是小彭。 今天,我们正式开启一个新专栏 —— 计算机组成原理。 计算机组成原理是计算机科学中最基础

何为神经网络卷积层?

摘要:本文深度讲解了卷积计算的原理,并详细介绍了构成所有卷积网络主干的基本元素,包括卷积层本身、填充和步幅的基本细节、用于在相邻区域汇聚信息的汇聚层,最后给出卷积层和汇聚层的代码示例和CNN框架结构图。 本文分享自华为云社区《神经网络基础部件-卷积层详解》,作者: 嵌入式视觉 。 前言 在全连接层构

认识 CPU 底层原理(2)——逻辑门

本文为B站UP主硬件茶谈制作的系列科普《【硬件科普】带你认识CPU》系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除 上一篇文章我们从最基本的粒子的角度认识了组成CPU的最基本单元MOSFET的原理。CPU作为计算机的核心硬件,其最主要的功能是进行运算,本章我们将会介绍CPU设计者是如

基于桶的排序之计数排序

# 基于桶的排序之计数排序 作者:[Grey](https://www.cnblogs.com/greyzeng/) 原文地址: [博客园:基于桶的排序之计数排序](https://www.cnblogs.com/greyzeng/p/16928076.html) [CSDN:基于桶的排序之计数排序