码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 为什么用二进制进行数据传输、二进制概述及移位运算和乘除的关系


    目录

    一、为什么用二进制进行数据传输

    二、二进制数概述

    三、移位运算和乘除的关系


    一、为什么用二进制进行数据传输

    计算机内存都是由IC电子原件组成的,其中CPU和内存也是IC电子原件的一种

    CPU图:

    52c3713e0328427f924e77a9709857ae.jpeg

     内存条图:

    2acf6b1ecfa04665845d8fe40985bc77.jpeg

     CPU和内存使用IC电子原件作为基本单元,IC电子原件有不同钟形状,但是其内部的组成单元称为一个个的引脚。有人说CPU和内存内部都是超大规模集成电路,其实IC就是集成电路(Integrated Circuit)

    IC元件切面图:

    9737f797536841bfb5e3ba8958e639f1.png

    IC元件两侧排列的四方形就是引脚,IC的所有引脚,只有两种电压:0V 和 5V,IC的这种特性,也就决定了计算机的信息处理只能用0和1表示,也就是二进制来处理。一个引脚可以表示一个0或1,所以二进制的表示方式就变成0,1,10,11,100,101等,虽然二进制数并不是专门为引脚来设计的,但是和IC引脚的特性非常吻合

    计算机的最小集成单位为 位 ,也就是 比特(bit),二进制数的位数一般为8位、16位、32位,64位,也就是8的倍数,为什么要跟8扯上关系?因为在计算机中,把8位二进制数统称为一个字节,一个字节有8位,也就是由8个bit构成

    为什么1个字节等于8位?因为8位能够涵盖所有的字符编码

    字节是最基本的计量单位,位是最小的单位

    用字节处理数据时,如果数字小于存储数据的字节数(= 二进制的位数),那么高位和数学的数字表示是一样的,左侧表示高位,右侧表示低位。比如这个六位数用二进制数来表示就是100111,只有6位,高位需要用0填充,填充完后是00100111,占一个字节,如果用16位表示就是0000 0000 0010 0111占用两个字节

    我们一般口述的32位和64位的计算机一般就指的是位数,32位一次可以表示4个字节,64位一次可以表示8个字节的二进制数

    我们一般在软件开发中用十进制数表示逻辑运算,也会被计算机转换为二进制数处理。对于二进制数,计算机不会区分它是图片、音频文件还是数字,这些都是一些数据的结合体

    二、二进制数概述

    我们把00100111 这个数转换为十进制,二进制转换为十进制数,直接将各位置上的值 * 位权即可

     二进制转换十进制示意图:

    55cb9dfdbfe04980bb0f2418c47a4a8d.png

    也就是说,二进制数代表的 0010011转换成十进制就是39,这个39并不是3和9两个数字连着写,而是3 * 10 + 9 *1 ,这里面的 10,1 就是位权,以此类推,上述例子中的位权从高为到低位以此就是 7 6 5 4 3 2 1 0 。这个位权也叫做次幂,那么最高位就是2的7次幂,2的6次幂等等。二进制数的运算每次都会以2为底,这个2指的就是基数,那么十进制的基数也就是10。在任何情况下位权的值都是 数的位数 -1,那么第一位的位权就是 1 -1 =0,第二位的位权就是 2 -1=1,依次类推

    其他进制转换的可参考我以前的博客:

    (1条消息) 进制转换、原码、反码、补码及位运算详解_夏志121的博客-CSDN博客_进制转换器补码https://blog.csdn.net/m0_61961937/article/details/124903628?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166459983716800180621267%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166459983716800180621267&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-124903628-null-null.nonecase&utm_term=%E8%BF%9B%E5%88%B6%E8%BD%AC%E6%8D%A2&spm=1018.2226.3001.4450

    三、移位运算和乘除的关系

    跟十进制一样,二进制也能加减乘除,只要注意逢2进位即可。二进制的运算,也是计算机程序所特有的运算,因此了解二进制的运算必须要掌握

    移位运算是指将二进制的数值的各个位置上的元素左移和右移操作

    移位过程图:

    72e70d929b7c4116b6f703eabd76853a.png

    上述例子还是以39为例,我们先把十进制的39转换为二进制的 0010 0111,然后 向左移位 << 一个字节,也就变成了 0100 1110 ,那么再把此二进制数转换为十进制数就是上面的78,十进制的78竟然是十进制的39的2倍关系。在让 0010 0111左移两位,也就是 1001 1100,得出来的值是156,相当于扩大了四倍

    因此可以得出结论,左移相当于是数值扩大的操作

     

  • 相关阅读:
    Vue Admin Template关闭eslint校验,lintOnSave:false设置无效解决办法
    尚未解决的难题
    【SA8295P 源码分析 (一)】111 - 使用 Infineon 工具升级DHU 的MCU 固件过程指导
    PE 通过导入表注入 Dll
    财务RPA与数字化转型——财务RPA如何促进企业的数字化转型
    多模态大模型总结
    K8S之应用配置管理笔记
    小学生python编程----学爬虫
    LeetCode题目笔记——1710. 卡车上的最大单元数
    golang Goroutine超时控制
  • 原文地址:https://blog.csdn.net/m0_61961937/article/details/127133607
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号