精华内容
下载资源
问答
  • 二进制转十六进制的详细步骤
    2022-03-27 16:12:11

    输入

     11001001111011111000001000010011

    输出

    C9EF821

    #include<bits/stdc++.h>
    using namespace std;
    //num()函数:将每四位二进制转换为1为的16进制,然后cout
    char num(string s){
        int r=0,i,t=1;
        for (i = s.size()-1; i >=0; i--)//倒过来输出
        {
            r=r+(s[i]-'0')*t;
            t=t*2;
        }
        // 字符数组存放转换后的数
        char c;
        if(r<10){
            c=r+'0';
        }else{
           c=r+'A'-10;
        }
        return c;//返回c
    }
    
    int main(){
        string s,t;
        cin>>s;
        //先判断字符串的长度是否为4的倍数,不是的话补零
        if(s.size()%4==1){
            s="000"+s;
        }else if(s.size()%4==2){
            s="00"+s;
        }else if(s.size()%4==3){
            s="0"+s;
        }
        // cout<<s<<endl;
        for (int i = 0; i<s.size(); i=i+4)
        {
            t=s.substr(i,4);
            cout<<num(t);//将截取的四位二进制步步转换
        }
        system("pause");
        return 0;
    }

    3

    更多相关内容
  • 深入理解二进制 算法必备底层知识

    多人点赞 2021-07-27 17:46:35
    深入理解二进制计算机储存方二进制原码、反码、补码为什么使用补码位运算位操作符补码运算位运算的应用 计算机储存方 二进制 在计算机世界里,所有的信息都是以二进制的形式组成的,比如一个整型数字3,在计算机中...

    计算机储存方式

    在这里插入图片描述

    二进制

    在计算机世界里,所有的信息都是以二进制的形式组成的,比如一个整型数字3,在计算机中的存在形式是0000 0000 0000 0000 0000 0000 0000 0011。一个字符’a’,在计算机中的存在形式是0110 0001(即97),你编写的一行代码#include<iostream>,在计算机中的存在形式是
    (#)00100011 (i)01101001 (n)01101110 (\c)01100011 (l)01101100 (u)01110101 (d)01100100 (e)01100101 (<)00111100 (i)01101001 (o)01101111 (s)01110011 (t)01110100 (\r)01110010 (e)01100101 (a)01100001 (m)01101101 (>)00111110,当然,经过编译器的处理,所写的代码会以更简洁的形式储存

    原码、反码、补码

    三种储存方式均是为了负数的表示。
    原码:依靠符号位判断正负数。
    反码:原码基础上除符号位外其它位值取反。
    补码:在反码的基础上+1。

    理解:
    正数在原码、反码、补码的机制上储存方式不变

    如 int 型的 3:
    原码:0000 0000 0000 0000 0000 0000 0000 0011
    反码:0000 0000 0000 0000 0000 0000 0000 0011
    补码:0000 0000 0000 0000 0000 0000 0000 0011

    负数则各有各的储存法则

    如 int 型的 -3
    原码:1000 0000 0000 0000 0000 0000 0000 0011
    反码:1111 1111 1111 1111 1111 1111 1111 1100
    补码:1111 1111 1111 1111 1111 1111 1111 1101

    (注:最靠左边的位是符号位,1代表负数,0代表正数)

    为什么使用补码

    原开始计算机储存用的是原码,有一个很明显的短板,就是在涉及运算时很难处理数据,加减时运算如下图所示在这里插入图片描述
    乘除时就更麻烦了

    为解决这个难题,反码就应运而生了,它并未真正解决了问题,它有正0负0的概念,在运算时也会出错,其实反码也仅仅是个概念,未被真正运用过

    很快,在反码的基础上衍生了补码,即在反码的基础上+1,以1111 1111 1111 1111 1111 1111 1111 1111代表-1,它能很好地解决运算问题
    在这里插入图片描述

    八进制和十六进制

    在平时的运用中二进制代码很少被使用,而是以八进制和十六进制代替。

    八进制:以0开头,由数字0-7组成
    十六进制:以0x或0X开头,由数字0-9和字母a-f或A-F组成,字母不区分大小写

    以int型的 19 为例
    二进制:0000 0000 0000 0000 0000 0000 0001 0011
    八进制:0 000000000023
    十六进制:0x 00000013
    容易看到八进制以三个bit为一个单位,十六进制以四个bit为一个单位,以二进制转十六进制举例,还是19:
    二进制->十六进制 19 = 0000(0) 0000(0) 0000(0) 0000(0) 0000(0) 0000(0) 0001(1) 0011(3) =0x00000013
    括号里的是十六进制

    有必要注意的是,不要忽略了符号位。32位的数字只有31位是有效的,0x7fffffff是最大值,而0xffffffff代表-1

    可以看到,八进制和十六进制可以很好地表示二进制位,当你想求某个特定的最大范围或最小范围时,十进制显得非常吃力,而八进制和十六进制在这方面简单很多

    位运算

    也叫按位运算,按位操作用来操作整数基本数据类型中的单个”比特“(bit),即二进制位。按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。
    按位操作符来源于C语言面向底层的操作,在这种操作中经常需要操纵硬件,设置硬件寄存器内的二进制位。Java的设计初衷是嵌入电视机机顶盒内,所以这种面向底层的操作仍被保留了下来。但是,人们可能不会过多地用到位操作符

    位操作符

    位操作符有七种,包括按位操作符4种,移位操作符3种

    按位操作符

    1. 按位"与"(&):如果两个输入位是1,则按位与生成一个输出位1,否则生成一个输出位0

    2. 按位"或"(|):如果两个输入位里只要有一个是1,则按位或生成一个输出位1,只有在两个输入位但是0的情况下生成一个输出位0

    3. 按位"异或"(^):如果两个输入位的某一个是1但不全是1,那么按位异或操作生成一个1

    4. 按位"非"(~):也叫取反运算符,它属于一元操作符,按位非生成与输入位相反的值----若输入0,则输出1;若输入1,则输出0。

    移位操作符
    5. 左移位运算符<<:能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0)
    6. "有符号"右移位运算符>>:能按照操作符右侧指定的位数将操作符左边的操作数向右移动。“有符号"右移操作符使用"符号扩展”:若符号为正,则在高位插入0;若符号为负,则在高位插入1。
    7. "无符号"右移位运算符>>>:能按照操作符右侧指定的位数将操作符左边的操作数向右移动。“无符号"右移操作符使用"0扩展”:无论正负,都在高位插入0。这一操作符是C或C++所没有的。

    理解:
    以一字节的3和-6来举例;
    3的二进制:0000 0011
    -6的二进制:1111 1010
    3&(-6)=0000 0010=2;
    3|(-6)=1111 1011=-5;
    3^(-6)=1111 1001=-7;
    ~3=1111 1100=-4;
    ~(-6)=0000 0101=5;
    3<<1=0000 0110=6;
    3>>1=0000 0001=1;
    3>>>1=0000 0001=1;
    (-6)<<1=1111 0100=-12;
    (-6)>>1=1111 1101=-3;
    (-6)>>>1=0111 1101=125;

    补码运算

    整数运算
    加法(+):按位相加
    减法(-):按位相减
    乘法(*):分为2次幂相乘和常数相乘
    除法(/):分为2次幂相除和常数相除

    理解:
    以一字节的3和-6来举例;
    3的二进制:0000 0011
    -6的二进制:1111 1010

    加减法
    3+(-6)=1111 1101=-3;
    3-(-6)=0000 1001=9;

    乘法
    要计算3*(-6)首先要理解值的算法
    对于一字节整数3
    3=1*20+1*21+0*22+0*23+0*24+0*25+0*26
    容易得到

    3*20=(1*20+1*21+0*22+0*23+0*24+0*25+0*26)*20=3<<0=0000 0011=3
    3*21=(1*20+1*21+0*22+0*23+0*24+0*25+0*26)*21=3<<1=0000 0110=6

    当求3*11时
    11=0000 1011=1*20+1*21+1*23
    则3*11=3*(1*20+1*21+1*23)=3<<0+3<<1+3<<3=33

    对于负数-6
    -6=-1*27+(0*20+1*21+0*22+1*23+1*24+1*25+1*26)
    同样利用分配律得
    3*(-6)=3*(-1*27+1*21+1*23+1*24+1*25+1*26)=(-(3<<7)+(3<<1)+(3<<3)+(3<<4)+(3<<5)+(3<<6))=-18

    除法
    对于一字节整数3
    3=1*20+1*21+0*22+0*23+0*24+0*25+0*26
    容易得到

    3/20=(1*20+1*21+0*22+0*23+0*24+0*25+0*26)/20=3>>0=3
    3/21=(1*20+1*21+0*22+0*23+0*24+0*25+0*26)/21=3>>1=1 …

    对于常数除法困难度有点大,大家有兴趣自己去了解吧

    位运算的应用

    在这里插入图片描述

    1.交换两个数的值
    通过三个运算交换x、y的值:
    x=x^y;
    y=x^y;
    x=x^y;
    实质上是
    y=x^y^y=x;
    x=x^y^x=y;
    这仅仅是个二进制智力游戏,并不会带来性能的提升,可以以此深入学习二进制的一些运算

    2.求一个数二进制有多少个1
    方法1:
    遍历所有位数

    for(int i = 0;i < 32;i++)
    {
    	if((m>>i)&1==1)//m为待求数 
    	count++;//1的数量 
    }
    

    方法2:
    利用m&=(m-1)

    while(m)
    {
    	count++;
    	m&=(m-1);
    }
    

    解释:
    m&(m-1)可以消除最后一个1,以6为例
    6=0000 0101;
    6-1=0000 0100;
    6&(6-1)=0000 0100=5;
    5-1=0000 0011;
    5&(5-1)=0000 0000;
    可以看出m&(m-1)可以消除最后一个1;

    3.二进制是一个很好的散列表
    很多算法结构都基于二进制实现的,如大小堆(优先级队列),树状数组等,它也可以代表组合例如a[2]={1,2,3},它的子数组有
    0=000={};
    1=001={3};
    2=010={2};
    3=011={2,3};
    4=100={1};
    5=101={1,3};
    6=110={1,2};
    7=111={1,2,3};
    二进制有很多用法,深入学习二进制对算法学习有很大帮助,大家加油吧

    4.非常妙的二进制实战,一定要学习一下
    老鼠试药

    在这里插入图片描述

    创作不易点赞三连!!!

    展开全文
  • 二进制转八进制算法为了把换算为二进制,将每一个八进制数字替换成表2-2中对应的三位。例如,八进制123换算成结果就是001010011:表2-2 二进制/八进制换算表为了将一个换算为八进制,只需将二进制串划分成每三个位一...

    二进制与八进制的互相转换和二进制与的转换类似,区别在于需要操作的是三位一组而不是四位。表2-2列出了二进制与八进制的等效表示。

    二进制转八进制算法

    为了把换算为二进制,将每一个八进制数字替换成表2-2中对应的三位。例如,八进制123换算成结果就是001010011:

    b4971db67fa43598a8daf6e72b156fa7.png

    表2-2 二进制/八进制换算表

    34154e75f80b2971f5a8925cf88f2e8d.png

    为了将一个换算为八进制,只需将二进制串划分成每三个位一组(如果需要的话,在前面补零),然后查表2-2,将三位一组的位串替换为相应的字即可。

    如果需要将八进制数换算为,只需将八进制数换算为二进制,然后再换算为十六进制即可。

    八进制化为十进制:

    例:将八进制数12转换成

    9c724136cafb83e9f2c631d573130b7c.png

    八进制化为二进制:

    规则:按照顺序,每1位改写成等值的3位,次序不变。

    例: (17.36)8 = (001 111 .011 110)2 = (1111.01111)2

    八进制化为

    先将八进制化为二进制,再将二进制化为十六进制。

    例:(712)8 = (1110 0101 0)2 = (1CA)16

    转换为八进制

    二进制化为八进制:

    部份从最低有效位开始,以3位一组,最高有效位不足3位时以0补齐,每一组均可转换成一个八进制的值,转换完毕就是八进制的整数。

    小数部份从最高有效位开始,以3位一组,最低有效位不足3位时以0补齐,每一组均可转换成一个八进制的值,转换完毕就是八进制的小数。

    例:(11001111.01111)2 = (011 001 111.011 110)2 = (317.36)8

    十六进制化为八进制:

    先用1化4方法,将化为二进制;再用3并1方法,将二进制化为8制。

    例: (1CA)16 = (111001010)2 = (712)8

    说明:小数点前的高位零和小数点后的低位零可以去除。

    化八进制

    方法1:采用除8取余法。

    例:将115转化为

    8| 115…… 3

    8| 14 …… 6

    8| 1 …… 1

    结果:(115)10 = (163)8

    方法2:先采用十进制化二进制的方法,再将二进制数化为八进制数

    例:(115)10 = (1110011)2 = (163)8

    展开全文
  • 二进制 计算

    万次阅读 多人点赞 2019-05-08 11:54:36
    当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。     将正的十进制数除以二,得到的商...

    1、加法法则: 0+0=0,0+1=1+0=1,1+1=10  

    2、减法法则: 0 - 0 = 0 1 - 0 = 1 1 - 1 = 0 0 - 1 = 1 有借位,借1当(10)2 0 - 1 - 1 = 0 有借位 1 - 1 - 1 = 1 有借位。减法,当需要向上一位借数时,必须把上一位的1看成下一位的(2)10。   

    3、乘法法则: 0×0=0,0×1=1×0=0,1×1=1  

    4、除法法则: 0÷1=0,1÷1=1  除法应注意: 0÷0 = 0 0÷1 = 0 1÷0 = 0 (无意义)  

    扩展资料

    二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。

     

     

    将正的十进制数除以二,得到的商再除以二,依次类推知道商为零或一时为止,然后在旁边标出各步的余数,最后倒着写出来,高位补零就OK咧。

    展开全文
  • 1、背景(Contexts)之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于、八、十、十六进制转换的计算公式的,进制之间的转换是很基础的知识,但是我发现网络上没有...
  • 二进制树型搜索算法 二进制搜索算法 (Binary Search Algorithm) Binary Search is applied on the sorted array or list of large size. It's time complexity of O(log n) makes it very fast as compared to ...
  • 二进制搜索算法Binary Search is the most popular Searching Algorithm which is most asked in coding interviews. Its popularity is because of it’s time complexity, where the linear search algorithm ...
  • 整数十进制转二进制 键盘获取一个整数赋值给n,调用Interger的toString方法,打印n的二进制输出形式。 import java.util.Scanner; public class 二进制位运算 { public static void main(String[] args) { Scanner...
  • 算法——二进制乘法

    2021-12-23 09:49:18
    跟十进制的乘法一样,只是说它只有0和1,十进制有0~9,从低位开始,每个位相乘,然后加法进位即可。
  • 十转二进制的转换及其简便方法

    千次阅读 2021-07-17 11:20:28
    十进制与二进制之间的转换 1 十进制转二进制 方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。 简便方法为:将常用的2的多少次方...
  • 二进制数的运算方法

    万次阅读 多人点赞 2017-08-29 14:12:13
    1.二进制数的算术运算 二进制数的算术运算包括:加、减、乘、除四则运算,下面分别予以介绍。 (1)二进制数的加法 根据“逢二进一”规则,二进制数加法的法则为: 0+0=0 0+1=1+0=1 1+1=0 (进位为1)...
  • 好多年前学过十进制转二进制的笔算过程,不过一直都没机会用上,很快就忘记了,最近因工作原因有几次需要做进制转换的计算,懒得上网查就根据记忆中模糊的印象瞎推导,搞着搞着就搞出了这样的推导方式,如图: ...
  • 首先,我们需要知道十进制转换为二进制的手算算法。最简单的就是(10)===》(1010);所以,基本的思想是就是利用%运算,得到的余数,存入栈中来,就可以得到而二进制的数。 实现 void sb(int s,stack &t) { int...
  • 遗传算法二进制编码

    万次阅读 多人点赞 2017-09-05 19:33:43
    遗传算法的基本步骤遗传算法 GA 的流程如图所示:Created with Raphaël 2.1.0编码把所需要选择的特征进行编号,每一个特征就是一个基因,一个解就是一串基因的组合。为了减少组合数量,在图像中进行分块,然后把每...
  • (三) (二进制) ↔ (八、十六进制) (四) (八进制) ↔ (十六进制) 四.扩展阅读  之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二、八、十、十六...
  • 所以我在不断找一个算法,让客户端更新的时候下载的内容更少。在弱网环境,上传和下载的速度受限,在保证每次数据同步的完整下,让每次传输的内容更少也是我最近研究的内容 相信大家都用过QQ客户端,不知道小伙伴...
  • 动态二进制树搜索算法 二进制搜索树 (Binary Search Tree) A binary search tree is a useful data structure for fast addition and removal of data. 二进制搜索树是用于快速添加和删除数据的有用数据结构。 It...
  • 二进制如何转换成八进制?

    万次阅读 2021-01-17 03:04:29
    展开全部二进制转换为八进制方法:1、取三合一法,即从二进制的小数点为分界点,32313133353236313431303231363533e58685e5aeb931333431366431向左(向右)每三位取成一位,接着将这三位二进制按权相加,得到的数就是...
  • 将十进制数转换成二进制、八进制、十六进制算法 递归算法: //将数字a转成b进制数 public static void anInt(int a, int b) { if (a / b != 0) { an(a / b, b); } if (a % b >= 10) { System.out.print(...
  • 文章目录一、问题描述一、数学模型、使用步骤1.引入库2.读入数据总结 一、问题描述 本文研究的无容量限制设施选址问题是运筹学领域的一个著名问题。该问题只有二元决策变量,适合于验证二元优化算法的性能分析和...
  • 因为C语言的printf函数的格式化输出只支持八进制和十六进制的输出,所以二进制需要自己实现。 这其中有几个难点,一是算法,二是数据结构。可以用二不断除被除数取余数,倒序输出,还可以像我这么想,用位运算和...
  • 二进制转换为八进制方法:1、取三合一法,即从二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,得到的数就是一位八位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的...
  • 十进制转换为二进制并输出,本文仅讨论整数部分  方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一 直持续下去,直到商为0为止;最后读数时候...
  • 二进制转八进制的两种方法

    千次阅读 2018-12-06 08:55:50
    解法一: #include&lt;math.h&gt; #include&...//定义一个二进制字符串数组 char newArr[100];//定义一个八进制字符串数组 int ch = 0;//一个和变量 gets_s(arr);//输入二进制数据 i...
  • 十六进制转八进制算法

    千次阅读 2019-10-31 20:30:47
    种:十六转,转八.   利用字符串解决显然具有巧妙性,枚举出并不多的情况.避免了不必要的循环的出现 #include #include #include #include #include #include #include using namespace std; int main...
  • * 截断二进制指数退避算法: * (1)协议规定了基本退避时间为争用期2t,具体的争用期时间是51.2us。对于10Mb/s以太网 * ,在争用期内可发送512bit,即64字节。也可以说争用期是512比特时间。1bit时间就是发送 * 1bit...
  • 二进制数的加法步骤解析

    千次阅读 2020-11-18 17:43:00
    文章目录位运算二进制数加法步骤例子代码演示 二进制的加法需要用到位运算,所以先来复习下位运算。 位运算 运算 符号(java) 描述 位与 & 都为1,结果为1,否则为0。 位或 | 有一个为1或两个位都为1,...
  • 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。二进制数据也是采用位置计数法,其位权是以2为底的幂。二进制转换十...
  • [Matlab]离散二进制粒子群算法(BPSO )解决背包问题什么是离散二进制粒子群算法(BPSO )描述离散二进制粒子群算法(BPSO )步骤背包问题描述解决思路函数设计targetPackage.mpsoForBackpack.m图像 什么是离散...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 107,236
精华内容 42,894
关键字:

二进制算法步骤