精华内容
下载资源
问答
  • C语言算法之将十进制数转换成二进制数

    万次阅读 多人点赞 2018-06-20 14:35:29
    导语:在C语言中没有将其他进制的数直接输出为二进制数的工具或方法,输出为八进制数可以用%o,输出为十六进制可以用%x,输出为二进制就要我们自行解决了。下面给大家讲述一下如何编程实现将十进制数转换成二进制数...

    导语:在C语言中没有将其他进制的数直接输出为二进制数的工具或方法,输出为八进制数可以用%o,输出为十六进制可以用%x,输出为二进制就要我们自行解决了。下面给大家讲述一下如何编程实现将十进制数转换成二进制数。

    原文的实现方式太年轻了,是我大一的时候写的。由于太多小伙伴被『溢出』困扰(在溢出的情况下原文的实现就不灵了),补充下面这种最佳的实现方式。

    最佳的方式是利用栈先进后出的特性,计算每一位(0或1)压入栈中,再将所有元素出栈得到的01串就是目标二进制数。以下为C++实现代码,想用C语言实现的可以进行相应的改造,用数组实现一个栈,用字符数组实现字符串。

    #include <iostream>
    #include <stack>
    
    using namespace std;
    
    string transfer(int x) {
        if (x == 0) {
            return "0";
        }
        string ret;
        stack<char> st;
        while (x > 0) {
            if (x % 2 == 1) {
                st.push('1');
            } else {
                st.push('0');
            }
            x /= 2;
        }
        while (!st.empty()) {
            ret.push_back(st.top());
            st.pop();
        }
        return ret;
    }
    
    int main() {
        int x;
        cin >> x;
        cout << transfer(x) << endl;
        return 0;
    }

    下面是大一时候的实现,没有考虑溢出的问题,对于不懂栈的同学可以看一下。

    先将源代码展示给大家:

    #include <stdio.h>
    void main()
    {
        //进制转换函数的声明
        int transfer(int x);
        int x;
        printf("请输入一个十进制数:");
        scanf("%d",&x);
        printf("转换成二进制数是:%d\n",transfer(x));
    }
    int transfer(int x)
    {
        int p=1,y=0,yushu;
        while(1)
        {
            yushu=x%2;
            x/=2;
            y+=yushu*p;
            p*=10;
            if(x<2)
            {
                y+=x*p;
                break;
            }
        }
        return y;
    }

    具体算法体现在函数体内,使用了一个while(1)的死循环,当结果产生后跳出循环。变量yushu是每一次循环内产生的余数,变量x每次循环都会被赋予新的值,这个新的值就是每一次循环内产生的商。当产生的商小于2时即产生了最后的结果(二进制数),然后跳出循环。

    例如:函数自变量若为7,用自变量7除以2,得到第一次循环产生的余数为1,第一次循环产生的商为3;用第一次循环产生的商3除以2,得到第二次循环产生的余数为1,第二次循环产生的商为1。

    变量y的存放也是有一定技巧的,由于每次产生的余数都小于2并且都是最后二进制数中需要按位展现出来的,因此每一次循环产生的余数都要合理地进行存放。第一次产生的余数放在个位,第二次产生的余数放在十位,第三次产生的余数放在百位......依次类推,直至某一次循环产生的商小于2,最后再把小于2的那个商放在最高位。变量p的作用就是控制位数,变量y的初始值定为0,变量p的初始值定为1,每次循环内变量p都自乘10,每次循环内都让变量y加上yushu*p,这样就实现了余数的按位存放。最后将小于2的那个商乘以p加到变量y中,得到最后的二进制数。

    例如:还是以自变量7为例,第一次循环后y的值为1,第二次循环内if语句之前y的值为11,if语句内y的值变为111,111即为7的二进制数。

    注意:变量p的自乘要放在变量y加上yushu*p之后!顺序不能颠倒!

    欢迎大家关注/订阅我的微信公众号Code Art Online,我会在我的公众号分享个人见闻,发现生活趣味;这里不仅有0和1,还有是诗和远方↓↓↓

    展开全文
  • 1、整数转二进制数 //将一个int型整数转换为二进制数 string itob(int number) { string binNum; while (number) { binNum += '0' + number%2; number /= 2; } reverse(binNum.begin(), binNum.end()); ...

    1、整数转二进制数

    //将一个int型整数转换为二进制数
    string itob(int number)
    {
    	string binNum;
    	while (number)
    	{
    		binNum += '0' + number%2;
    		number /= 2;
    	}
    	reverse(binNum.begin(), binNum.end());
    	return binNum;
    }

    如果需要二进制数高位补零,或者是正负数转换的二进制数有符号位,则可以对以上代码稍作处理。

    2、二进制数转整数

    //方法一:将一个二进制数转换为int型整数(不考虑有符号位的情况)
    int btoi(string binNum)
    {
    	int ret = 0;
    	for (auto x : binNum)
    		ret = ret * 2 + (x - '0');
    	return ret;
    }

    当然你也可以从二进制的低位开始算起(就像教科书里将一个二进制数化为整数那样),如下

    //方法二:将一个二进制数转换为int型整数(不考虑有符号位的情况)
    int btoi(string binNum)
    {
    	int ret = 0;
    	for (int i = binNum.size() - 1; i >= 0; i--)
    		ret += (binNum[i] - '0') * pow(2, binNum.size() - i - 1);
    	return ret;
    }

    两种方法都可以实现目的,但是在对二进制求模的时候会稍有区别,继续往下面看。

    3、二进制求模

    现在有个问题:有两个二进制字符串binStr1、binStr2,要求你用binStr1对binStr2求模,结果还是用二进制字符串形式返回,你会怎么做?

    当然,最容易想到的也最简单的方式,就是利用我们上面写的btoi和itob函数,现将这两个二进制字符串转换为整数,然后整数用%求余,结果再用itob函数转换为二进制字符串返回,完美!

    那你真的是很聪明了!我现在加大难度,假如说binStr1这个二进制串非常非常长,表示的整数远远超过了int甚至是long long类型所能表示的范围;也就是说这个整数计算机它存储不了!(当然binStr2表示的范围没有那么变态,因为对binStr2求模的结果可能需要用计算机表示出来)。那这个时候我还让你求出这个模的结果(求模的结果用二进制串或者整数类型表示都可以),你会怎么办?

    我们先来看一下二进制求模的时候是什么样子的吧。假如我们需要求10011110(158) 对1010(10)的模:

    余数1000(8)即所求的结果。

    其实我们演示的这个二进制除法过程跟十进制除法是一样的。当然我们受此启发,如果按照这个过程对binStr1和binStr2进行处理,求他们模的结果,应该说也不是不可以,只是这样会特别麻烦。

    如果我们对这个过程继续深入探究的话,我们将会发现一些端倪!!

    看除法的过程是怎么做的??对于被除数二进制串,不停的往后走,直到找到一个大于等于除数二进制串的数,第一次找到的是10011,对除数1010作除法得到余数1001,然后拿到被除数的下一位组成10011,继续对除数1010作除法,得到余数1001,然后继续往下面进行..........

    如果我们不用处理二进制字符串的方法进行求余数,而是在这个过程中用整数求余的方式进行,不是也完美避免了因为二进制数过大而导致的计算机不能表示带来的死结嘛?

    直接上代码,给出一个直观的理解:求一个二进制串表示的大整数对另一个整数求模的结果,结果用十进制整数返回

    /**
      function:求一个二进制串表示的大整数对另一个整数求模的结果,结果用十进制整数返回
      假设:二进制串表示的大整数是bigBinNum,对mod求模。
      **/
    #define MOD mod
    int binaryMod(string bigBinNum)
    {
    	int ret = 0;
    	for (auto x : bigBinNum)
    		ret = (ret * 2 + x - '0') % MOD;
    	return ret;
    }

    这里的代码流程跟上面二进制转整数方法一里面的方法是一样的,只是稍稍多加了一个求模的功能。

    在刷LeetCode的时候遇到这个小问题(求一个二进制串表示的大整数对另一个整数求模的结果,结果用十进制整数返回),在此稍作总结,以便以后可以随时复习查看。

     

    展开全文
  • 二进制数的运算方法

    万次阅读 多人点赞 2017-08-29 14:12:13
    1.二进制数的算术运算 二进制数的算术运算包括:加、减、乘、除四则运算,下面分别予以介绍。 (1)二进制数的加法 根据“逢二进一”规则,... (2)二进制数的减法 根据“借一二”的规则,二进制数减法的法则为:

    1.二进制数的算术运算
    二进制数的算术运算包括:加、减、乘、除四则运算,下面分别予以介绍。

    (1)二进制数的加法

      根据“逢二进一”规则,二进制数加法的法则为:
      0+0=0
      0+1=1+0=1
      1+1=0 (进位为1) 
      1+1+1=1 (进位为1)
    
      例如:1110和1011相加过程如下:
    

    在这里插入图片描述

      (2)二进制数的减法
    
      根据“借一有二”的规则,二进制数减法的法则为:
    
      0-0=0
      1-1=0
      1-0=1
      0-1=1 (借位为1)
    
      例如:1101减去1011的过程如下:
    

    在这里插入图片描述

      (3)二进制数的乘法
    
      二进制数乘法过程可仿照十进制数乘法进行。但由于二进制数只有0或1两种可能的乘数位,导致二进制乘法更为简单。二进制数乘法的法则为:
    
      0×0=0
      0×1=1×0=0
      1×1=1
    
      例如:1001和1010相乘的过程如下:
    

    这里写图片描述

      由低位到高位,用乘数的每一位去乘被乘数,若乘数的某一位为1,则该次部分积为被乘数;若乘数的某一位为0,则该次部分积为0。某次部分积的最低位必须和本位乘数对齐,所有部分积相加的结果则为相乘得到的乘积。
    
      (4)二进制数的除法
    
      二进制数除法与十进制数除法很类似。可先从被除数的最高位开始,将被除数(或中间余数)与除数相比较,若被除数(或中间余数)大于除数,则用被除数(或中间余数)减去除数,商为1,并得相减之后的中间余数,否则商为0。再将被除数的下一位移下补充到中间余数的末位,重复以上过程,就可得到所要求的各位商数和最终的余数。
    
      例如:100110÷110的过程如下:
    

    这里写图片描述

      所以,100110÷110=110余10。
    

    2.二进制数的逻辑运算
    二进制数的逻辑运算包括逻辑加法(“或”运算)、逻辑乘法(“与”运算)、逻辑否定(“非”运算)和逻辑“异或”运算。

      (1)逻辑“或”运算
    
      又称为逻辑加,可用符号“+”或“∨”来表示。逻辑“或”运算的规则如下:
    
      0+0=0或0∨0=0
      0+1=1或0∨1=1
      1+0=1或1∨0=1
      1+1=1或1∨1=1
    
      
      可见,两个相“或”的逻辑变量中,只要有一个为1,“或”运算的结果就为1。仅当两个变量都为0时,或运算的结果才为0。计算时,要特别注意和算术运算的加法加以区别。
    
      (2)逻辑“与”运算
    
      又称为逻辑乘,常用符号“×”或“· ”或“∧”表示。“与”运算遵循如下运算规则:
    
      0×1=0或0·1=0或0∧1=0
      1×0=0或1·0=0或1∧0=0
      1×1=1或1·1=1或1∧1=1
    
      可见,两个相“与”的逻辑变量中,只要有一个为0,“与”运算的结果就为0。仅当两个变量都为1时,“与”运算的结果才为1。
    
      (3)逻辑“非”运算
    
      又称为逻辑否定,实际上就是将原逻辑变量的状态求反,其运算规则如下:
    
    
      可见,在变量的上方加一横线表示“非”。逻辑变量为0时,“非”运算的结果为1。逻辑变量为1时,“非”运算的结果为0。
    
      (4)逻辑“异或”运算 
      “异或”运算,常用符号“”或“”来表示,其运算规则为:
    
      00=0 或 00=0
      01=1 或 01=1
      10=1 或 10=1
      11=0 或 11=0
    
      可见:两个相“异或”的逻辑运算变量取值相同时,“异或”的结果为0。取值相异时,“异或”的结果为1
    
    展开全文
  • 想要了解二进制数是如何表示计算机信息的?先要追本溯源, 二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)...

    二进制是什么?

    想要了解二进制数是如何表示计算机信息的?先要追本溯源,
    二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示。数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个比特(Bit,Binary digit的缩写)。——百度百科

    是不是看的头大,要怨就怨德国数学家莱布尼茨,瞅瞅这发量。。学不过他头发还没人多,确定了眼神,你我是来人间凑数的╮(╯▽╰)╭。
    在这里插入图片描述

    他是世界上第一个提出二进制记数法的人。用二进制记数,只用0和1两个符号,无需其他符号。相信上过学的都认识他,没错这个大佬还跟牛顿先后独立发现了微积分,对数学、哲学、法学多个领域都有研究,历史上少见的通才(学哲学的就是不一样,这应该已经是神界大佬了),被誉为十七世纪的亚里士多德。

    为什么用二进制数来表示计算机信息的?

    众所周知,计算机是由集成电路IC(Integrated Circuit)这种电子部件构成的,IC有几种不同的形状,有的像黑色蜈蚣,两侧有许多引脚。
    在这里插入图片描述
    有的像插花用的针盘,引脚在IC内部并排排列着。
    在这里插入图片描述

    大多数IC的电源电压是+5V(不过为了控制电量的消耗,有的IC也会使用+5V以下的电压),直流电压只有0V或5V两个状态。也就是说IC的一个引脚,只能表示两个状态,IC的这个特性,决定了计算机的信息数据只能用二进制数来表示,还真是巧了,虽然二进制的计数方式并不是专门为IC而设计的,但是刚好对应上了二进制的0和1这两个数字。这点我要当个带哲学家,这世间万事万物都是有其存在的道理的,就像咱大中国使用阴、阳两种元素来表示天地万物。你认为巧合的其实正是大自然的规律,正所谓道生一,一生二,二生
    在这里插入图片描述

    咳咳,回归正题,也由于二进制的运算法则也很简单,所以在计算机内部通常用二进制数来作为内部存储、传输和处理数据。

    二进制数是如何表示计算机信息的?

    我们都知道计算机中数据存储的最小单位是“”,简记为b,也称为比特,其与二进制中的一位是一一对应的。二进制数的位数一般是8位、16位、32位、64位等。。也就是8的倍数,这是因为计算机所处理信息的基本单位“字节”就包含8位的二进制数。

    计算机中的内存和磁盘都是使用字节单位来保存和读写数据的,在一些计算机系统中,4 个字节代表一个字,例如unicode字符集,这是计算机在执行指令时能够有效处理数据的单位。
    大多数计算机存储英文是利用ASCⅡ将字母转化为数字存储。而存储中文最开始是利用GB2312/GBK,现在用unicode字符集;unicode字符集包含所有字符(推荐大家以后利用UTF-8,毕竟现在内存也是越做越大,除了单片机应用没必要委屈自己);

    展开全文
  • 汇编语言二进制数和十进制数相互转换课程设计!
  • 把任意一个十进制数转换为二进制八进制十六进制数的c++源代码
  • Java实现 蓝桥杯 算法训练 二进制数

    万次阅读 多人点赞 2020-02-07 20:57:17
    试题 算法训练 二进制数数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述  给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。  如5的二进制为101,包含2个“1”。 输入格式  第一行包含...
  • 因为C语言的printf函数的格式化输出只支持八进制和十六进制的输出,所以二进制需要自己实现。...1.对十进制数与1与操作,结果为二进制数的末位,保存到数组 2.对十进制数进行右移操作,保存在临时变...
  • 将十进制数转换为二进制数符号)Matlab
  • 首先我们来看看16进制与10进制的的对比:十进制数 :0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...现在来看二进制与十六进制的对应关系表:二进制与十六进制的对应关系表012340000000100100011010056789010...
  • 二进制下异或运算与二进制数中1个数的奇偶性联系,也就是说三种情况,1.拥有奇数个1的二进制数与拥有奇数个1的二进制数的异或运算。2.拥有奇数个1的二进制数与拥有偶数个1的二进制数的异或运算。3.拥有偶数个1的...
  • 如果我们要把十进制的150转化为二进制数,可以使用下面两种方法: 第一种方法:表格法 这种方法的核心思想就是用二进制的各位来“拼凑”出我们的十进制数。 我们先把二进制各位的位权列在表格里面。(我们如何...
  • 十进制数转换为二进制数以及浮点数存储方法

    万次阅读 多人点赞 2019-03-22 15:45:26
    一、十进制数转换为二进制数 十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。 1. 十进制整数转换为二进制整数 十进制整数转换为二进制...
  • Excel实现符号十进制数转二进制数

    千次阅读 2017-08-31 18:41:53
      最近需要用到将Excel中范围为-1023~+1023的数据转换为二进制,其实这个...  Excel中自带十进制转二进制的函数,DEC2BIN,就是这个函数,我们来看一下这个函数的用法,这个函数两个参数,number和[places],...
  • 常见的比较二进制工具有哪些

    千次阅读 2016-05-16 11:23:00
    二进制是计算技术中广泛采用的一种数制,用0和1两个数码来表示的。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。 如果两份二进制文件存在差异,肉眼是很难快速并且地准确...
  • 汇编语言:将ASCⅡ码表示的十进制数转换为二进制数/十六进制数 你们好! 这是我的第一个汇编程序的博客,汇编是一个神奇的东西,你深入了解他之后会为他着迷的!!! 题目 将ASCⅡ表示的十进制数字转化为二进制数,...
  • 十进制整数转换成二进制采用“除2倒取余”,十进制小数转换成二进制小数采用“乘2取整”。 例题: 135D = __ B 解析:如下图所示,将135除以2,得余数,直到不能整除,然后再将余数从下至上倒取。得到结果:1000 ...
  • C语言栈的方式实现十进制数转换为二进制数,完整代码,DEVC中直接使用
  • 用汇编实现二进制数向十六进制数的转换 一、实现功能 1)实现二进制数向十六进制数的转换 2)实现十六进制数向二进制数的转换‘ 二、设计分析       汇编语言中,字符在机器中都是以ascii码的二进制...
  • 将十进制数转换为二进制数

    千次阅读 2015-08-12 16:14:53
    尾声前言题目:如何将一个十进制的数转换为二进制数?补充说明,这是我在做一个项目时发现的问题,因此顺手把这个问题给解决了一下。代码#include using namespace std;//函数binary说明:整个函数为递归实现,其中...
  • java_十进制数转换为二进制,八进制,十六进制数的算法
  • 要求:算法求一个十进制正整数在二进制表示中的二进制数字个 实现两种方式,一种是常规的做法,另外一种是利用递归。 常规的做法,利用十进制转换为二进制的算法是K除法(k表示十进制要化成多少进制) int ...
  • 如何把单精度二进制数转换成十进制数?
  • 二进制数转为十进制数 c语言实现

    千次阅读 2019-10-30 22:49:15
    进制数 余数 再除 余数 … … 1或者0 1 / 0 然后结果就是余数从下至上的所有数。余数只可能是0 / 1. 代码 #include<stdio.h> #include<math.h> int main() { int a[10] = {1,0,0,1,0,1,1...
  • 十进制数和二进制数之间的转换

    万次阅读 2018-04-19 09:56:09
    十进制转换为二进制数需要利用除k取余法,其中循环和递归二中算法,下面看一下代码:递归版:#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; #include&...
  • 负数的补码=该数绝对值的二进制数—取反—加1; 一个符号的int型变量(当时2个字节时)取值范围:-2∧15~(2∧15-1),既-32768~32767;无符号的int型变量的取值范围是0~65535; 若int a=32767;int b=a+1;则...
  • 使用递归函数实现将一个十进制数转化为二进制数

    千次阅读 多人点赞 2019-10-21 13:05:46
    使用递归函数实现将一个十进制数转化为二进制数 思路简析: 因为递归函数一个调用本身的过程,所以会先打印出最后调用的数。儿我们在使用短除法的时候也是将余数进行倒序输出。所以,采用递归函数进行二进制转化更...
  • 将 ASCII 码表示的十进制数转换为二进制数
  • 对于刚开始学习C语言的来说,我们知道%d可以表示十进制的数,%o可以表示八进制的数,%x用来表示十六进制的数,但却没有来表示二进制数的。 这就是相对应的八进制数和十六进制数#include &lt;stdio.h&gt; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,036,255
精华内容 414,502
关键字:

二进制数有哪些