精华内容
下载资源
问答
  • 假设有这么一个函数valueAtBit(num, bit),输入一个十进制数num,求它的二进制数的bit是多少(注意bit应该从1算起) 以下是几种实现方法的总结: 方法一,最硬核的方法 这个方法模拟了平时我们计算二进制数的过程...

    题目描述:
    假设有这么一个函数valueAtBit(num, bit),输入一个十进制数num,求它的二进制数的bit位是多少(注意bit应该从1算起)
    以下是几种实现方法的总结:

    方法一,最硬核的方法

    这个方法模拟了平时我们计算二进制数的过程:

    1. num除以2,求出得商和余数(假设商为resu,余数为rest)
    2. 拿上次的商resu再除以2,求得新的商resu和本轮的余数rest
    3. 重复1、2步操作,直至商resu为0
    4. 倒序将所有的余数rest拼接即为该十进数的二进制表示

    将上述过程实现成js代码如下:

    function valueAtBit1(num, bit) { // 方法一
    	var result = [];
    	var rest = 0;
    	var resu = num;
    	while (resu != 0) {
    		rest = resu % 2;
    		resu = parseInt(resu / 2);  // 这里不要漏掉将小数转成整数
    		result.push(rest);  // 这里的数组即为存储二进制数的各个位数(字符类型)
    	}
    	return result[bit - 1];  // 这里是应题目要求,求bit位的
    }
    

    方法二,使用js自带方法toString

    function valueAtBit2(num, bit) { // 方法二
    	var binary = num.toString(2);
    	return binary[binary.length - bit];
    }
    

    toString接收一个参数radix(基数),表示你要把该数字对象(注意是数字对象才包含该方法,不可以是字面量)转成几进制的字符串。

    方法三,使用移位操作

    function valueAtBit3(num, bit) { // 方法三
    	return num >> (bit - 1) & 1; //下面两种不可以, 因为只有与运算才能把除第一位以外的其他位“置零”.
    	// return num >> (bit - 1) | 0;
    	// return num >> (bit - 1) ^ 0;
    }
    

    这个方法是跳过求二进制数这个过程,直接求bit位的,因为移位操作只能是对二进制进行运算,所以这里可以直接用num,>>会隐式转换成二进制。
    这个方法的原理是这样的:(不过如果大家看不懂以上的语句,建议在这之前先看一下位运算的基础知识哈)

    1. 先让所求位向右移到第一位,这时左边空出来的位会自动补0,先叫它“已移位的num”
    2. 让移位操作后的这个数和1相与(1的二进制除第一位左边全为0),这样相与了之后,得到的结果是除第一位之外的其他位都变为0,此时按照相与运算的运算规则:- 如果“已移位的num”第一位是0那么相与之后是0;- 如果“已移位的num”第一位是1那么相与之后是1。此时返回的结果便是所求。

    可能我陈述得有点乱,不过大家可以亲测一下,原理很巧妙哦。

    方法四,仅使用位相与操作

    function valueAtBit4(num, bit) { // 方法四
    	var binary = Math.pow(2, bit - 1);
    	return (num & binary) == 0 ? 0 : 1; // ==比&优先级要高所以需要加括号
    }
    

    该方法与方法三有点相似,不过这个方法不需进行移位操作,而是先生造一个与所求位匹配的二进制数,让它们俩相与,如果结果为非零则返回1,结果为零则返回0
    比如说要求29的二进制数的第3位,那么过程如下:

    1. 29 的二进制表示为 11101(这个过程由位操作符自动转换)
    2. 求第 3 位,那么生造一个二进制数 00100(除所求位为1,其他位为0),能达到这个效果的就需要用到Math.pow()这个方法了
    3. 让1、2步的这两个数进行位相与,结果是除所求位之外的其他位变为0,所求位如果原来是1则相与之后该位为1;,所求位如果原来是0则相与之后该位为0;(在本例中结果为 00100)
    4. 通过三元表达式判断结果并返回:判断第3步的结果是否为0,如果为零则返回0,如果非零则返回1(在本例中,结果00100即为十进制的4,非零,所以返回1)

    我们可以验证一下结果,返回的1在原来的11101的第三位中确实是1,大家也可以验证看看其他位。原理也比较巧妙哦。
    其中方法三和方法四学自牛客网的巨佬们,在这里要谢谢各位巨佬们。
    同时也感谢读者们能读到最后,阿里嘎多~

    展开全文
  • 十进制数转换为二进制数 C++前言一、十... 设目标十进制数为n,用短除法一直除以2,循环这个过程并记录余数,当商为0时结束循环,余数从后往前就是转换为的二进制数 eg: 二、代码实现 1.设计转换函数transfer // ..
      
    


    前言

    这篇文章和大家分享一下我个人对十进制数转换为二进制数的想法,目前暂时更新只整数十进制的转换,后续会更新带有小数的进制转换。(代码使用c++实现)


    一、十进制转换为二进制的数学算法

    设目标十进制数为n,用短除法一直除以2,循环这个过程并记录余数,当商为0时结束循环,余数从后往前读就是转换为的二进制数

    eg:在这里插入图片描述

    二、代码实现

    1.设计转换函数transfer

    // flag是位数控制器,用remainder来暂时保存每一位余数,y是转换的二进制结果。我们的目标是把流程结束后的余数倒序输出 ,比如13的二进制数1101,但是每次除以2后得到的余数都是个位数,所以我选择使用一个位数控制器flag,从初始值1开始和remainder相乘,然后迭代(每次乘以十)进入下一次除以2的过程,然后每次迭代相加y就能得到二进制数1101(其实这个1101是用十进制显示的),而我们知道,当除数=0时就停止循环,所以我们设置If条件来控制结束
    演示一遍具体的循环流程:

     eg:13(10)----1101(2):
      1. remainder=n%2=1; n=n/2=6; y=y+remainder*flag=0+1*1=1;flag=flag*10=10;
      2. remainder=n%2=0; n=n/2=3; y=y+reminder*flag=1+0*10=1;
    flag=flag*10=100;
      4. remainder=n%2=1; n=n/2=1; y=y+reminder*flag=1+1*100=101;
    flag=flag*10=1000;
      5. remainder=n%2=1; n=n/2=0;y=y+reminder*flag=101+1*1000=1101;
    flag=flag*10=10000;
    此时n=0if(n==0)成立,停止循环,输出y。
    
    int transfer(int n)
    {
        int flag=1,y=0,remainder; 
        while(1)
        {
            remainder=n%2;
            n/=2;
            y+= remainder*flag;
           flag*=10;
            if(n==0)
            {
                break;
            }
        }
        return y;
    }
    

    2.完整代码

    代码如下(示例):

    #include <cstdio>
    #include<iostream>
    using namespace std;
    int a[1000001];
    int main()
    {
    
        int transfer(int n);
        int n,sum=0,y;
        scanf("%d",&n);
        y=transfer(n);
        
        printf("%d\n",y);
        return 0;
    }
    int transfer(int n)
    {
        int flag=1,y=0,remainder;
        while(1)
        {
            remainder=x%2;
            n/=2;
            y+=remainder*flag;
            flag*=10;
            if(n==0)
            {
                break;
            }
        }
        return y;
    }
    
    

    总结

    其实笼统来说,主要的思想就是从位数由低到高,把余数依次乘以1,10,100,1000再加起来就是用十进制的形式表示了转换后的二进制(1101=1乘1+0乘10+1乘100+1乘1000),需要注意的是位数控制器flag的使用。

    展开全文
  • QT 收到下机16进制数转换字符串显示,绝对可靠 简单易懂。
  • 寄存器值查看助手,十六进制,十进制显示二进制值;
  • Python将二进制数存进列表List

    千次阅读 2019-06-16 17:11:48
    为了与其他列表在索引上的使用相同,我就想写一个函数将整数转化成二进制数,再将二进制数存入到列表中 代码如下: # 算法采用的是移位(除2)取余的思想 # 此处不使用自带的bin()函数是因为bin()返回的是字符...

    最近在学习算法,多次遇到0/1背包问题,而在0/1背包问题中的物品是否放入背包由0、1决定,与二进制数很相似。为了与其他列表在索引上的使用相同,我就想写一个函数将整数转化成二进制数,再将二进制数按位存入到列表中

    代码如下:

    # 算法采用的是移位(除2)取余的思想
    # 此处不使用自带的bin()函数是因为bin()返回的是字符串
    # 且bin(3) = '0b11', bin(4) = '0b100',返回的二进制数位数不同
    # t是输入的int数据,n是保留的二进制位数
    def bit_to_list(t, n):
        S = [0 for i in range(n)]    
        i = -1
        while t != 0:
            S[i] = t % 2
            t = t >> 1
            i -= 1
        return S

    输出结果:

     

    展开全文
  • 要想获取某个数的二进制的某一是0还是1,可以将这个二进制数的某一与1进行与运算,如果结果为1,则该是1,否则为0。例如那整数100来说,它的二进制数是1100100,求第5(从右往左数)二进制数是0还是1,可将...

    要想获取某个数的二进制的某一位是0还是1,可以将这个二进制数的某一位与1进行与运算,如果结果为1,则该位是1,否则为0。例如那整数100来说,它的二进制数是1100100,求第5位(从右往左数)二进制数是0还是1,可将1100100&10000得出,结果为0。具体程序实现可以是,将1左移4位,与运算后再右移四位,再判断结果。

    public class A {
    	public static void main(String[] args) {
    		String str = ((100&(1<<4))>>4)==0?"0":"1";
    		System.out.println("100的第5位二进制是"+str);
    	}
    }
    //100的第5位二进制是0
    
    展开全文
  • 二进制算法小游戏.zip

    2019-06-04 15:38:11
    通过STM32F103ZET6产生二进制随机数,随机点亮四盏LED灯,蓝灯为最高,即蓝灯亮时为1*2^3,红灯亮时为1*2^2,黄灯亮时为1*2^1,绿灯亮时为1*2^0。 2.通过四路电容触摸按键输入答案,答题时间有十秒钟,答案初始...
  • 二进制状态标志在Java中的应用

    千次阅读 2019-11-15 16:57:36
    1、二进制 为什么是二进制呢?因为计算机在计算的时候全部都是基于二进制计算的。在Java中声明一个普通的int类型变量: private int age = 10; 此时的变量 age 是默认十进制的,转化为二进制也就是:1010。如果想要...
  • //如十进制数字1,转化为8位二进制 int a=1; string b=Convert.ToString(1,2); //但是得到的字符串是"1"而不是"00000001" //这就需要补齐位数了 string b=Convert.ToString(1,2).PadLeft(8,'0');//PadLeft(int a,cha...
  • 现有一个二进制数,如何快速判断某是0还是1? 比如:2345678,我要判断从右到左第3是0 或 1,怎么快速判断? S:待判断的二进制数 W:待判断的(右往左) 结果:((S>>(W-1)) & 1
  • 一、输出十进制、十六进制、八进制数: dec: 指示cout以十进制输出。 December hex: 指示cout以十六进制输出。 Hexadecimal oct: 指示cout以八进制输出。 October #include<iostream> using namespace ...
  • 今天来练习一下,对一个数的二进制数进行翻转,求出翻转后的二进制数对应的十进制数值。 即:原数据的二进制序列为 00000000000001010 经过翻转后的序列变成了 11111111111110101 求出这个新的二进制序列对应的十...
  • 文章目录#十进制数转换为二进制数1、十进制整数转换为二进制整数2、十进制小数转换为二进制小数#浮点类型数据的存储#参考 #十进制数转换为二进制数   十进制数转换为二进制数时,由于整数和小数的转换方法不同,...
  • C/C++ 十进制数转化为二进制并输出

    千次阅读 2021-09-02 21:22:59
    十进制转化为二进制并输出(以整型为例)...所得数便是转化成的二进制数(除二取余法) 例如:将40转化为二进制数 40/2 商为20 余数为0 k1 20/2 商为10 余数为0 k2 10/2 商为5 余数为0 k3 5/2 商为2 余数为1 k4...
  • Q都等于0 一旦置R = 0,S = 1,R不变的情况下,无论S如何改变,Q都等于1 我们观察后面加粗的句子,不难看出,1个二进制数被“锁在”了器件中,这也就是所谓的锁存器,它在功能上,实现了存储1个二进制。...
  • 将一个16进制的二进制位反序

    千次阅读 2017-09-22 10:32:55
    这是昨天晚上某号称中国创新力最强的应用层网络...程序如下:编写函数reverse(),将val(32无符号整数)的二进制位反序。比如,如果val的二进制表示为1011000011111111,反序后的val的二进制表示为 1111111100001101.
  • 如将以十六进制表示的温度度数以数码管的形式显示,如有符号16'b1111 1111 1101 1111,表示成-2.0625度 wire [15:0] t_buf = temp[15] ? (~(temp - 1'b1)) : temp;//temp为实际到的芯片度数,十六进制补码形式 ...
  • 1 二进制 2 原码、反码、补码 3 运算符 4 运算符使用技巧 上回学习运算符时,漏了运算符,因为运算符理解起来稍微有点复杂,所以要单独写一篇~ 要理解按运算符,要先了解计算机进行存储和计算的底层逻辑。...
  • 程序员二进制计算器 v1.36

    热门讨论 2014-07-16 16:21:43
    (1)二进制数 以0b或0B开头,后面的0、1数字之间可以用空格分隔。 0b1001 = 9 0b 1001 0110 = 0x96 = 150 0B1001 0110% = 150% = 1.5 (2)八进制数 以0开头: 010 = 8 027 + 7 = 23 + 7 = 30 (3)...
  • 二进制

    2018-12-10 11:07:39
    二进制数据是用0和1两个数码来表示的。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”(十进制加减法是“逢十进一”、“借一当十”)。数字电子电路中,&amp;quot;逻辑门&amp;quot;的实现...
  • C++笔记:二进制运算 一、二进制 二进制二进制计数系统,用01串表示。 1.十进制转二进制: 整数部分,把十进制转成二进制一直用短除法分解至商为 0。余数从下到上,即是二进制的整数部分数字。 小数部分,...
  • 这算是数据的表示运算这一部分的第一篇文章了,这部分多且繁杂,因为我们通常都是以10进制进行计算和表示的,用了10几年,突然接受一种新的表示方式难免会导致理解困难。初学这章我也是半懵逼状态的,好在复习了...
  • 双11“光棍节”即将来临,为了祝福大家脱单能取得成功,小魔在此分享一个用来撩妹撩汉的心魔术。小魔曾经在高中和大学的班级联谊中都表演了这个魔术,效果甚佳,甚至可以大胆的牵对方的手!!!大胆牵手首先介绍...
  • Python字节某一的值,设置某一的值,二进制位操作   在物联网实际应用项目开发中,为了提升性能,与设备端配合,往往最终使用的是二进制字节串方式进行的通信协议封装,更会把0和1、True和False、Yes和No...
  • java中的二进制以及基本运算

    万次阅读 多人点赞 2018-06-30 17:50:57
    二进制数据是用0和1两个数码来表示的。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是...
  • 【C语言】将十进制数转化为二进制并输出

    万次阅读 多人点赞 2018-07-16 22:02:49
    十进制转化为二进制并输出(以整型为例) 首先需要明确十进制转为二进制的算法:将所需转化的...所得数便是转化成的二进制数(除二取余法) 例如:将20转化为二进制数 20/2 商为10 余数为0 k1 10/2 商为5 余数为0 k2...
  • 每次都是在课本的最前几页,来上这么一段:什么反码是原码除符号,按取反。补码等于反码加一。然后给整得莫名其妙,稀里糊涂地,接着就是翻页,反正后面的内容也跟三码没多大关系。 我原来也是看了好几遍都没看...
  • 下面这个表达式可以匹配01串S当且仅当S是一个可以被3整除的二进制数。 ^1((10*1)|(01*0))*10*$ 如果你不信的话,不妨把下面这段代码粘贴进浏览器的地址栏,然后回车运行一下: javascript:alert(/^1((10*1)|(01*0...
  • MATLAB读二进制文件

    2020-01-06 21:14:18
    fopen : 打开文件,以二进制形式访问,并返回大于或等于3的整数,作为文件标识符。(MATLAB® 保留文件标识符 0、1 和 2 分别用于标准输入、标准输出(屏幕)和标准错误。)如果fopen无法打开文件,则返回-1. ...
  • SD卡二进制读数 该项目从SD卡读取数据,并将其以32为一组输出到Mimas A7 Artix 7的7段显示器。 概述 七段显示子系统 七段显示从扩展到包括16十六进制显示,或覆盖整个屏幕。 因此,启用了一些关键更改。 需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 165,899
精华内容 66,359
关键字:

二进制的数位怎么读