刷算法题遇到二进制就非常之头疼,故在此做一个学习记录:

文章目录

  • 一、进制
  • 二、二进制运算法则
    • 1. 算术运算(加减乘除)
    • 2. 逻辑运算
  • 三、进制转换
    • 1. 权的概念
      • (1)基本概念
      • (2)数字按权展开
    • 2. 进制转换
      • (1)按权展开凑数法——其他进制转换为十进制
      • (2)短除法——十进制转换为其他进制
    • 3. 十进制负数的进制转换
      • (1)原码、反码、补码
      • (2)负数的进制转换
  • 四、移位运算
  • 参考文献

一、进制

进制也就是进位计数制,是人为定义的带进位的计数方法,对于任何一种进制—X进制,就表示每一位上的数运算时都是逢X进一位。
我们平时所使用的计数法则为十进制,即个位满10就向高位进一位,十位为1,个位回到0;二进制就是满2时向高位进1位,当前位置为0。
“数制”只是一套符号系统来表示指称“量”的多少。我们用“1”这个符号来表示一个这一“量”的概念。自然界的“量”是无穷的,我们不可能为每一个“量”都造一个符号,这样的系统没人记得住。所以必须用有限的符号按一定的规律进行排列组合来表示这无限的“量”。符号是有限的,这些符号按照某种规则进行排列组合的个数是无限的。十进制是10个符号的排列组合,二进制是2个符号的排列组合。

二、二进制运算法则

1. 算术运算(加减乘除)

二进制的加减乘除与十进制基本相同,只是数字的表示方法不一样。

(1)二进制的加法:0+0=0,0+1=1 ,1+0=1, 1+1=10(向高位进位);
(2)二进制的减法:0-0=0,10-1=1(向高位借位) 1-0=1,1-1=0 (模二加运算或异或运算) ;
(3)二进制的乘法:0 * 0 = 0 0 * 1 = 0,1 * 0 = 0,1 * 1 = 1
(4)二进制的除法:0÷0 = 0,0÷1 = 0,1÷0 = 0 (无意义),1÷1 = 1 ;


  • 由于四位二进制可以表示为一位十六进制,故一般将二进制按四位进行分段表示

2. 逻辑运算

(1)二进制的运算:遇1得1 (存真则真)
(2)二进制的运算:遇0得0 (遇假则假)
(3)二进制的运算:各位取反

三、进制转换

1. 权的概念

(1)基本概念

  • “权”就是进制为基底的n次幂,如二进制的权就是(2)^n 、十进制的权就是(10)^n
    看到十进制我们就很自然的想到科学计算法中的(10)^n。有了权这个定义之后,我们就可以随便把一个进制的数转化成另一个进制的数了。日常生活中,由于电脑的字节,汉字西文的字节的原因,二进制最常见的转换是八进制,十六进制,三十二进制和十进制。

(2)数字按权展开

  • 任何进制中,每个数都可以按位权展开成各个数位上的数字乘以对应数位的位权,再相加的形式,如:
    十进制的123=1×100+2×10+3×1
    十进制的9876=9×1000+8×100+7×10+6×1
    十进制,满十进一,再满十再进一,因此要想进到第三位,得有10×10;第4位得有10×10×10
    这样我们就知道了:
    (1)对10进制,从低位到高位,依次要乘以10^0 、10^1 、10^2、 10^3……,也就是1、10、100、1000
    (2)对2进制,从低位到高位,依次要乘以2^0 、2^1 、2^2 、2^3……,也就是1、2、4、8、……
  • 模仿上面十进制按位权展开的方式,把二进制数1011按权展开

1011=1×23+0×22+1×21+1×20=1×8+0×4+1×2+1×1=8+2+1=11

2. 进制转换

以二进制为例,其他进制均是类似的方法

(1)按权展开凑数法——其他进制转换为十进制

一个数字可以展开为各个数位上的数字乘以对应数位的位权,得到的数值即为十进制。

十进制数:1234 = 1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0
二进制数:1011=1×2^3 + 0×2^2 +1×2^1 +1×2^0=11

(2)短除法——十进制转换为其他进制

将一个十进制数的商递归除以要转换的进制数(二进制为2),余数倒排即可,下图中6的二进制数即为110,转换为其他进制也是同理。


120转换为8进制,结果为:170


  • 特别的,16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15,字母不区分大小写。

3. 十进制负数的进制转换

(1)原码、反码、补码

  • 正数的原码、反码、补码相同!
  • (1)负数的原码:一个负数按绝对值大小转为二进制数,再在最高位上补1,即可得到负数的原码
  • (2)负数的反码:原码除符号位外,各位取反
  • (3)负数的补码:原码除符号位外,各位取反,最后一位再加1
    (负数在计算机中按补码形式表示)

(2)负数的进制转换

正数转换为二进制后,最高位补1,就得到负数转换后的二进制数。

四、移位运算

  1. 左移运算符(<<)
    按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。例如: 1 << i,则是将数字1左移i位
  2. 位与运算
    n&(1<<i):通过位与运算用1来检验数字n二进制的i位置上是1还是0

参考文献

  1. 二进制的运算法则
  2. 进制转换
  3. 负数的二进制转换方法

二进制运算法则、负数的二进制补码表示与进制转换(短除法)相关推荐

  1. 二进制在线计算机,计算机进制转换计算

    <计算机进制转换计算>由会员分享,可在线阅读,更多相关<计算机进制转换计算(8页珍藏版)>请在人人文库网上搜索. 1.各种进制转换一.进制的概念在计算机语言中常用的进制有二进制 ...

  2. 十进制、二进制补码、16进制补码的转换

    十进制转二进制补码 首先要明确的是:十进制直接转成二进制是转化为二进制原码,正数的原码和补码相同,但负数的原码按位取反末位加一才是补码. 因此流程图大概如下: 整个代码我贴在最后 主要逻辑代码: pu ...

  3. c++二进制转十进制_进制转换:二进制、八进制、十进制、十六进制相互转换

    将二进制.八进制.十六进制转换为十进制 二进制.八进制和十六进制向十进制转换都非常容易,就是"按权相加".所谓"权",也即"位权". 假设当 ...

  4. python3十进制转二进制_Python3中数字进制转换

    Python中数字进制默认为十进制,可通过内置函数转换为二进制.八进制.十六进制 十进制整数转其他进制 1. 十进制转二进制: 设 num1 为123,通过 type( ) 可以看到类型为 int 使 ...

  5. 补码原码转换c语言代码,c/c++原码反码补码原理 以及进制转换

    1首先了解 低字节位 和高字节位 看图 2字节在内存的排列方式//int num = 010; //0开头代表 8禁止 //("%d",num); //所以打印的是8 int nu ...

  6. 计算机数制(进制转换,原码,反码,补码,真值)

    目录 区分进制 带小数点的进制转化 进制转换练习 符号数的表示方法 区分: 考点:给你原码转换补码,补码最负的数的表示,0的表示 原码,反码,补码练习 区分进制 注意微机原理这门课用的是后缀的方式,C ...

  7. 进制转换(二进制,八进制,十进制)

    ####前言 对于整数,java语言有三种表现形式. 十进制,最常见,生活中使用的就是,范围:0-9,规则: 满10进1 .如"23" 八进制 ,范围:0-7 规则: 满8进1 用 ...

  8. 进制转换 和 正数负数——原码,反码,补码

    进制转换 定义:进制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制.八进制.十进制与十六进制,它们之间**区别在于数运算时是逢几进一位.比如二进制是逢2进一位,十进制也就 ...

  9. 进制转换小技巧之让你重新认识二进制补码(大师,我悟了)!!!

    前言 我们都知道计算机内部是使用二进制来进行运算的,那么你对于二进制转换为其它进制或者其它进制数转换为二进制数是否熟练于心呢? 与我们现实中的十进制不同,计算机内部使用二进制表示(一般我们书写用十六进 ...

  10. (笔记)labview各种进制转换(通讯得到的负数补码转换成负数原码)

    起因: 我是因为传感器手持显示器读到负的值,传感器说明书说通讯回馈负值是以补码形式,因此开始研究如何显示. 前情提要: modbus 485得到的是16进制 (右键选择16进制,否则是乱码) 已知原码 ...

最新文章

  1. 解读 | 2019 年 10 篇计算机视觉精选论文
  2. python提取部分字符串三参数_Python3字符串
  3. linux源码编译安装lamp环境搭建,linux下源码包编译安装LAMP环境
  4. 数组计算的数学模块----NumPy
  5. python安装虚拟环境出现错误_virtualenv 安装虚拟环境问题 请大神指点一二
  6. 面向对象基本原则-转载
  7. 干货:解码OneData,阿里的数仓之路。
  8. 人设倒了扶起来:Lazarus 组织利用含木马的IDA Pro 攻击研究员
  9. SpringBoot入门篇-HelloWorld案例
  10. JDK 下载和安装教程
  11. ipad mini2 12.5.4成功降级 10.3.3
  12. 计算机网络谢希仁课后答案详解+计算机网络释疑与习题解答PDF+各章重点题目
  13. 中科院计算机所沈阳待遇怎么样,中科院沈阳计算技术研究所计算机技术怎么样...
  14. 云和人工智烈日当头,华为HPC解决方案如何应对?
  15. iOS 指南针的制作 附带源码
  16. 第四天:关看门狗、设置栈、控制icache、重定位、链接脚本
  17. Java BufferedInputStream available()方法与示例
  18. Django 模型层(models) 复杂查询详解
  19. 如何用Python编写拼写校正器(拼写检查器)
  20. 如何设计一个优惠卷系统

热门文章

  1. 我要继续坚持梦想,把我的demo变成产品!
  2. 【综述】方面级情感分析 Aspect-level Sentiment Classification
  3. 中兴笔试题,求子区间元素运算后结果为0
  4. 小程序中实现搜索功能
  5. 23万字 前端HTML与CSS学习笔记总结篇(超详细)
  6. mediawiki mysql_MediaWiki/安装
  7. “做我女朋友好吗?”vbs源码
  8. 最后采用加权求和的方式得到样本的_一种婴幼儿视力自动检测方法与流程
  9. 类似飞秋的局域网软件_局域网办公、社交情怀工具之浅见
  10. JavaWeb学习--课程设计《小米商城》