精华内容
下载资源
问答
  • 二进制转换

    2019-10-08 18:18:57
    Questin:给出数字N,返回由若干"0"和"1"组成的字符串,该字符串为N的负二进制(base -2)表示。 示例 1: 输入:2 输出:"110" 解释:(-2) ^ 2 + (-2) ^ 1 = 2 示例 2: 输入:3 输出:"111" 解释:(-2) ...

    LeetCode1017

    Questin:给出数字 N,返回由若干 "0" 和 "1"组成的字符串,该字符串为 N 的负二进制(base -2)表示。

    示例 1:

    输入:2
    输出:"110"
    解释:(-2) ^ 2 + (-2) ^ 1 = 2
    

    示例 2:

    输入:3
    输出:"111"
    解释:(-2) ^ 2 + (-2) ^ 1 + (-2) ^ 0 = 3
    

    示例 3:

    输入:4
    输出:"100"
    解释:(-2) ^ 2 = 4

    和正常二进制数的计算一样,只不过二进制计算的时候是向下取整,负二进制是向上取整。
    以6为例 二进制计算
          6/2=3 余数 0
          3/2=1 余数 1 (向下取整所以3/2=1)
          1 余数 1 结果为 110;
        负二进制计算
          6/-2=-3 余数 0
          -3/-2=2 余数 1(向上取整-3/-2=2)
          2/-2=-1 余数 0
          -1/-2=1 余数 1
          1 余数 1 结果为 11010

    以上分析完成后开始java代码。
    代码地址 https://github.com/18306298951/Leetcode/blob/master/P1017


    转载于:https://www.cnblogs.com/wjlxq/p/10964954.html

    展开全文
  • 在实际开发中,我们可能会用0和1的字符串来表达信息,例如某设备有八个传感器,每个传感器的状态用1表示正常,用0表示故障,用一个二进制的字符串表示它们如01111011,也可以用一个字符或整数表示它即123。...

    在实际开发中,我们可能会用0和1的字符串来表达信息,例如某设备有八个传感器,每个传感器的状态用1表示正常,用0表示故障,用一个二进制的字符串表示它们如01111011,也可以用一个字符或整数表示它即123。

    1、自定义的二进制字符串转十进制bintodec

    思路:把二进制字符串从最高位(左边第一位)开始用商乘以2再加余数(该位的数字),如此循环,左边第一位的商肯定是0。

    例如1111011转化成十进制:

    0*2+1=1

    1*2+1=3

    3*2+1=7

    7*2+1=15

    15*2+0=30

    30*2+1=61

    61*2+1=123

    结果是123。

    示例:

    /*
     * 程序名:book.c,此程序用于把二进制的字符串转换为十进制的整数。
     * 作者:C语言技术网(www.freecplus.net) 日期:20190525。
    */
    #include "stdio.h"
    #include <string.h>
    
    // 把二进制字符串转换为十进制。
    // pbin:待转换的二进制字符串。
    // 返回值:二进制字符串转换为十进制整数的结果。
    long bintodec(const char *pbin)
    {
      int ii=0;
      long result=0;
    
      while (pbin[ii]!=0)
      {
        result=result*2+(pbin[ii]-'0');
        ii++;
      }
    
      return result;
    }
    
    int main()
    {
      char str[65];
    
      memset(str,0,sizeof(str));
      printf("请输入一个二进制的字符串(只能由0和1组成):");  
      scanf("%s",str);
    
      printf("%s转换为十进制的结果是:%d\n",str,bintodec(str));
    }
    

    2、获取视频教程

    百万年薪程序员录制,《C/C++高性能服务开发基础》视频教程已在CSDN学院发布,优惠价12元,地址如下:
    https://edu.csdn.net/course/play/29402

    3、版权声明

    C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。

    来源:C语言技术网(www.freecplus.net

    作者:码农有道

    如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发此文,让更多的人可以看到它,谢谢!!!

    展开全文
  • 二进制 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统...

    位操作符

    • 因为位操作符在数值都表示的最底层的操作,因此性能上比其他操作符要好,只做了解,性能好,但是会导致代码可读性降低
    • 二进制
      • 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。数字计算机只能识别0和1。简单,易于电子方式的实现。
      • 十进制转二进制
        • 用十进制数字除以2,取余数,用得到的结果继续除以2,一直到1除以2,然后求倒序就是二进制了
        • 例如:10,10/2 = 5 余 0 ;5/2 = 2余1;2/2 = 0;这时候除尽了,则进行最后一次计算,1/2除不开,直接等于1即可;最后组合余数为:0101,然后倒序就是1010,因此10转为二进制就是1010了
        • 因此,9的二进制就是9/2=4余1,4/2=2余0,2/2=0余0,1/2余1,得1001,倒序9的2进制就是1001
        • 39的二进制就是:39/2=19余1,19/2=9余1,9/2=4余1,4/2=2余0,2/2=0余0,1/2余1,组合余数:111001,倒序,39的二进制就是100111
      • 高位补0
        • 在内存中某一个类型的值是有固定长度的,比如int类型的是32位的,10转为二进制位1010,那么就会在1010前面补28个0,补为32位进行存储
        • 一般正数高位补0,负数高位补1
      • 二进制转十进制
        • 按权相加法
        • 10的二进制是1010,从右往左按下标来数,0的下标是0,1为1,0为2,1为3,把这些二进制中数字是1的下标当做2的幂进行相加,那么1010 = 0 + 2^1 + 0 + 2^3 = 0 + 2 + 0 + 8 = 10
        • 9的二进制是1001,相应的1001 = 2^0 + 0 + 0 + 2^3 = 1 + 0 + 0 + 8 = 9
        • 39的二进制是100111,相应的100111 = 2^0 + 2^1 + 2^2 + 0 + 0 + 2^5 = 1 + 2 + 4 + 0 + 0 + 32 = 39
      • 符号位
        • 正负号标记
      • 负十进制转二进制
        • 以-10为例,先将整数部分进行二进制计算,余数为0101,倒序10的二进制为1010,高位补0补到8位得00001010,取反得到11110101然后加1,由于二进制中只有0和1,因此遇2要进一位,则-10转为二进制位-11110110,负数高位补1
      • 二进制负数转十进制
        • 以-10为例,负数二进制位11110110,先减1,0位不够减,向前借一位,0往前借一位,得2,2减1得1,因此得到11110101,然后取反得到-00001010,这就是10的二级制了
      • 小数转二进制
        • 小数点前面按照正负数转换即可,把小数点前面的正数部分剥离开,补0,小数点后面的,每次乘以2,得到的结果取正数部分即可,然后拼接一起
        • 例如:10.2,10转为二进制为1010,剥离整数部分补0为0.2,0.2乘以2,为0.4,取整数部分0,0.4乘以2,得0.8,取整数部分0,0.8乘以2,得1.6,取整数部分1,现在整数部分有1了,记录1,然后剥离出去,这个1不用转二进制,即使转也是1,然后留下0.6,继续乘以2,得到1.2,剥离,得0.2,乘以2,得0.4,取整数部分……一直到够32位或者到达指定位数或者小数部分为0,最终结果为:1010.00110011001100110011
        • 例如:10.5,10转二进制为1010,保留剥离,剩余0.5,0.5乘以2得1.0,取整数部分,小数部分为0,因此不需要继续计算了,所以10.5转为二进制结果为:1010.1
      • 二进制小数转十进制
        • 先把整数部分和小数部分拆来,例如10.5的二进制为1010.1,拆为1010和0.1,然后整数部分按照二进制转十进制正常转换,小数部分0.1 =1 乘以 2 ^ -1 = 0.5,拼接后的10.5
        • 例如:10.2转为二进制位1010.00110011001100110011,整数部分转为10,小数部分为0.00110011001100110011就等于:0 * 2^ -1 + 0 * 2^-2 + 1 * 2^-3 + 1 * 2^ -4 + 0 * 2^-5…… (对应小数位置的0或1) * 2 ^ -n(从左往右1 - n)
    • 位操作是程序设计中对位模式按位或二进制数的一元和二元操作
      • 在js中对64位(0-9 + a-z + A-Z + - + ~)的数值会转为32位数值,计算完成在转为64位,NaN和Infinity会被当做0来处理,这是由于转换时存在的副效应,如果使用位操作符转换非数字,则会先把其转为Number类型,再进行转换
      • 按位非
        • 用~表示
        • 10的二进制位1010,补32位为00000000000000000000000000001010
        • var num = ~10,表示非10的二进制,则对上面的32位二进制数字进行求反得:11111111111111111111111111110101
        • 因此var num = ~10得 -11,本质上是对操作数的负值-1,相等于var num2 = -num - 1;
      • 按位与
        • 用&表示
        • 先将两边的操作数转为二进制,然后补齐32位,每一位进行比较,遇0返回0,都为1返回1
        • 例:2 & 4,2转为二进制为10,补齐00000000000000000000000000000010,4转为二进制为100,补齐后为:00000000000000000000000000000100,每一位对应比较,按照上面规则,没有对应的,全返会0,因此结果为00000000000000000000000000000000,也就是0
        • 例2 & 3,2转二进制为10,补齐00000000000000000000000000000010,3转二进制为11,补齐后得到结果为:00000000000000000000000000000011,参照以上规则,1对应1返回1,有0返回0,则得到结果为:00000000000000000000000000000010,转为十进制后,结果就为2
      • 按位或
        • 用|表示
        • 先将两边的操作数转为二进制,然后补齐32位,每一位进行比较,遇1返回1,都为0返回0
        • 例:2 | 4,2转为二进制为10,补齐00000000000000000000000000000010,4转为二进制为100,补齐后为:00000000000000000000000000000100,每一位对应比较,按照上面规则,遇1返回1,因此结果为00000000000000000000000000000110,也就是十进制的6
        • 例2 | 3,2转二进制为10,补齐00000000000000000000000000000010,3转二进制为11,补齐后得到结果为:00000000000000000000000000000011,参照以上规则,遇1返回1,都为0返回0,则得到结果为:00000000000000000000000000000011,转为十进制后,结果就为3
      • 按位异或
        • 用^表示
        • 先将两边的操作数转为二进制,然后补齐32位,每一位进行比较,一个为1,一个为0返回1,都为1返回0,都为0返回0
        • 例:2 ^ 4,2转为二进制为10,补齐00000000000000000000000000000010,4转为二进制为100,补齐后为:00000000000000000000000000000100,每一位对应比较,按照上面规则,因此结果为00000000000000000000000000000110,也就是十进制的6
        • 例2 ^ 3,2转二进制为10,补齐00000000000000000000000000000010,3转二进制为11,补齐后得到结果为:00000000000000000000000000000011,参照以上规则,则得到结果为:00000000000000000000000000000001,转为十进制后,结果就为1
      • 左移
        • 由<<表示
        • 就是将十进制的数转为二进制,将整体向左移动多少位后产生的结果
        • 例如:var result = 2 << 5; 2转为二进制为10,补位后为00000000000000000000000000000010,向左移动5位,得00000000000000000000000001000000,左移会把空位以0进行填充,然后把此结果转为十进制得64;
      • 有符号右移
        • 由>>表示
        • 例如:var result = 2 >> 5; 2转为二进制为10,补位后为00000000000000000000000001000000,向左移动5位,得00000000000000000000000000000010,然后把此结果转为十进制得2;
      • 无符号右移
        • 由>>>表示
        • 会对32位都进行向右移动
        • 例如: var result = 2 >> 5; 2转为二进制为10,补位后为00000000000000000000000001000000,向左移动5位,得00000000000000000000000000000010,然后把此结果转为十进制得2;但是负数结果就不一样了,只做了解
    • 位操作符应用
      • 例如:var str = ‘abcd’; var result = ~str.indexOf(‘a’); // -1 ; var result = ~str.indexOf(‘e’); // 0
    展开全文
  • 进制转换

    2019-10-06 11:09:57
    当然,不排除用正常十进制、八进制、十六进制还有各种怪异的三进制、三十二进制的东西。所以在实现代码的过程中要充分利用二进制的便利,所以要用道进制转换了。 这个是十进制转换为任意进制: #include <...

    都知道计算机用的是二进制,所以你要把计算机处理的速度尽量的加快,所以用二进制来算是最简单的了,因为它符合计算机的语言。

    当然,不排除用正常十进制、八进制、十六进制还有各种怪异的三进制、三十二进制的东西。所以在实现代码的过程中要充分利用二进制的便利,所以要用道进制转换了。

    这个是十进制转换为任意进制:

    #include <iostream>    
    using namespace std;    
    int main()    
    {    
        long n;    
        int p,c,m=0,s[100];       
        cin>>n;     
        cin>>p;        
        while (n!=0)
        {    
            c=n%p;    
            n=n/p;    
            m++;s[m]=c;
        }    
         
        for(int k=m;k>=1;k--)  
        {    
            if(s[k]>=10)
                cout<<(char)(s[k]+55);    
            else
                cout<<s[k];    
        }    
        return 0;    
    }    

    说白了就是自己模拟进制的过程,所以看代码吧!

    然后还有一个任意进制转换成十进制:

    #include<iostream>
    #include<string>
    using namespace std;
    inline int transform(char c)
    {
        if(c>='0'&&c<='9')
            return c-'0';
        else
            return c-'A'+10;
    }
    int main()
    {
        int n,l,ans=0;
        string str;
        cin>>n>>str;
        l=str.length();
        for(int i=0;i<l;i++)
        {
            ans*=n;
            ans+=transform(str[i]);
        }
        cout<<ans;
        return 0;
    }

     

    当然,如果能像网页上的那种计算器就好了,能把任意进制转换成任意进制。

    其实想想也就出来了,很简单。

    但是这里的输入输出的格式令人费解,但是标程只要两个char来存放就可以(我怎么没想到呢???),以至于用了一个十分 ** 的方法来解决这个问题:

    题目描述
    设字符串A$的结构为: A$='mp'
    其中m 为数字串(长度<=20),而n,p 均为1 或2 位的数字串(其中所表达的内
    容在2-10 之间)。
    程序要求:从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n 进制)
    以p 进制的形式输出。
    输入(diji.in)
    从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n 进制)以p 进制的
    形式输出。
    输出(digi.out)
    将10 进制数48,转换为8 进制数输出
    样例输入
    48<10>8
    样例输出
    48<10>=60<8>
    提示
    m<=20,
    2<=n,p<=20;

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    #include <cmath>
    #include <string>
    using namespace std;
    char n[10086];
    int k,m,mp,c[2333],b[2333],tmp,a;
    char cc[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G'};
    int main()
    {
        freopen("digi.in","r",stdin);
        freopen("digi.out","w",stdout);
        char n[10086];
        int m;
        int sum = 0;
        char ul[10],ur[10];
        for(int i = 0 ; ; i++)
        {
            scanf("%c",&n[i]);
            if(n[i] == '<')
                break;
        }
        /*for(int i = 0 ; ; i++)
        {
          scanf("%c",&ul[i]);
          if(ul[i] == '<')
          }*/
        //scanf("%s",n);
        scanf ("%d",&m);
        //cin>>ur;
        /*for(int i = 0 ; i <= strlen(n) ; i++)
          printf("%c",n[i]);*/
        for(int i = 0 ; ; i++)
        {
            scanf("%c",&ur[i]);
            if(ur[i] == '>')
                break;
        }
        //printf("%d\n",m);
        for(int i = 0 ; i < strlen(n) - 1; i++)
        {
            if(n[i] <= '9' && n[i] >= '0')
                sum = sum * m + (n[i] - '0');
            else
                sum = sum * m + (n[i] - 'A' + 10);
        }
        scanf ("%d",&mp);
        while (sum != 0)
        {
            c[++a] = sum % mp;
            sum = sum / mp;
        }
        for(int i = 0 ; i < strlen(n) - 1; i++)
            printf("%c",n[i]);
        cout<<'<'<<m<<'>'<<'=';
        for (int i = a ; i >= 1 ; i--)
            printf ("%c",cc[c[i]]);
        cout<<'<'<<mp<<'>';
        return 0;
    }

     

    转载于:https://www.cnblogs.com/Zhoier-Zxy/p/8075664.html

    展开全文
  • Java 整数拓展 进制转换 正常数字是 十进制 二进制结尾 0b 八进制结尾 0 十六进制结尾 0x \t为 空格 \n为 换行
  • 但是很多人都会将二进制转换成整数,但是如何用二进制表示负数呢?有的人会说,在二进制前面加个负数符合。而计算机只能认识0 和 1,又怎么去加个额外的负数符号呢?于是我们就需要用0和1来表示负数。如果想要弄懂这...
  • ...它包含一个把二进制数值转换成十六进制的函数,同样也可以反过来转。 #binary_value是二进制数值不是字符串,也不是int型的1010 [python] view plain copy binasc
  • 一个崇高的插件,将选定的数字转换为十进制或从十进制转换二进制/八进制/十六进制它可以作为所选数字的就地替换来完成,或者可以在带有分隔符的数字之后添加转换 用法 所有你需要做的选择(或者把光标放在后面,...
  • (16-1)/3=5,3个二进制数表示一个八进制数 aga3: push cx mov cl,3 rol bx,cl ;循环左移3位 pop cx mov dx,bx and dl,07h ;07h=0000 0111b,将dl的高4位清零,低4位的第一位清零 add dl,30h mov ah,2 int ...
  • 我的linux系统上有这个二进制文件。。udit@udit-Dabba ~ $ cat file.encSalted__s�bO��<0�F���Jw!���]�:`C�LKȆ�l使用hexdump命令,我看到它的信息如下。。udit@udit-Dabba ~ $ hexdump -C file.enc...
  • 这篇文章主要介绍了十进制负数转换为二进制、八进制、十六进制的知识分享,需要的朋友可以参考下 ...程序猿们或许对二进制都不...但是很多人都会将二进制转换成整数,但是如何用二进制表示负数呢?有的人会说,...
  • 计算机进制转换

    2017-02-15 09:19:14
    计算机进制转换 我们总是说八位二进制表示的数的范围是:-128——127, 可是我们知道在八位二进制原码【(-127~-0 +0~127)共256个】,反码【(-127~-0 +0~127)共256个】,都没有表示到-128,而为什么说八位二进制...
  • #Python3中进制转换

    千次阅读 2018-10-08 23:28:58
    Python中进制转换 #dec为正常输入的数字,默认为十进制数 print(“十进制数为:”, dec) 1. 十进制换算为二进制: print(“转换为二进制为:”, bin(dec)) print(&amp;quot;转换为二进制为:&amp;quot;...
  • 在实际开发中,我们可以用0和1的字符串来表达信息,例如某设备有八个传感器,每个传感器的状态用1表示正常,用0表示故障,用一个二进制的字符串表示它们如01111011,用一个字符或整数表示它就是123。 1、十进制转...
  • 进制转换、字符编码

    2017-01-12 16:12:20
    十进制、二进制、十六进制【进制转换】 1.十进制转二进制 1.1十进制整数转二进制 【除2取余,逆序排列】 具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此...
  • 思路:单纯的谈俩二进制数相加得到 一个二进制数有些难度,所以本题可将俩二进制数S1,S2分别转换为对应的十进制数x1,x2,再计算十进制的相加就简单多了,最后再讲十进制的结果转换为对应二进制即可。所以本题可构造两...
  • 进制转换为b进制

    千次阅读 2019-06-08 13:03:32
    package 进制转换; import java.util.Scanner; public class 进制转换_递归 { public static void main(String[] args) { System.out.print("请输入一个非负十进制数:"); long t1=System....
  • 进制转换(一学就会)

    2021-04-01 16:30:40
    进制转换了解进制转换十进制转二进制八进制转二进制十六进制转二进制二进制转十进制二进制转八进制二进制转十六进制记忆了解 了解 二进制:0,1 八进制:0,1,2,3,4,5,6,7 十进制:0,1,2,3,4,5,6,7,8...
  • 进制转换 题解

    2018-04-18 21:55:00
    【题目描述】我们可以用这样的方式来表示一...与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值-1)为指数,以2为底数的幂之和的形式。一般说来,任何一个正整数R或一个负...
  • 16进制转换为10进制数——算法

    千次阅读 2020-01-15 14:23:00
    16进制转换为10进制数 题目描述 问题描述 从键盘输入一个不超过8位的正...首先得将16进制数转换为4位二进制数,装入到字符串中,再从字符串总从末尾开始,逐一将2进制转换为10进制数字。(从末尾转换就不存在倒序转...
  • 但是很多人都会将二进制转换成整数,但是如何用二进制表示负数呢?有的人会说,在二进制前面加个负数符合。而计算机只能认识0 和 1,又怎么去加个额外的负数符号呢?于是我们就需要用0和1来表示负数。如果想要弄懂这...
  • 算法训练 进制转换

    2018-02-08 22:10:35
    算法训练 进制转换 时间限制:1.0s 内存限制:256.0MB 问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式。...
  • 问题 C: 进制转换

    2019-03-08 17:29:16
    问题 C: 进制转换 时间限制:1 Sec内存限制:32 MB 提交:733解决:290 [提交][状态][讨论版][命题人:外部导入] 题目描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入 多组数据,每行为一...
  • 大数进制转换问题

    千次阅读 2015-03-21 21:55:35
    在数据结构课关于栈的这一章中,我们都学过用“模2取余法”来将一个10进制数转换为一个二进制数,进而可以推广到“模n取余法”,经其转换为n进制(n任意指定)。 确实,这是一个很基础的题目,可你是否想过如果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,219
精华内容 35,287
关键字:

二进制转换正常数字