精华内容
下载资源
问答
  • 怎样比较不同进制数的大小
    千次阅读
    2021-05-20 03:48:11

    C语言中的整数除了可以使用十进制,还可以使用二进制、八进制和十六进制。

    二进制数、八进制数和十六进制数的表示

    一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种特殊的写法,具体来说,就是在数字前面加上特定的字符,也就是加前缀。

    1) 二进制

    二进制由 0 和 1 两个数字组成,使用时必须以0b或0B(不区分大小写)开头,例如:

    //合法的二进制

    int a = 0b101; //换算成十进制为 5

    int b = -0b110010; //换算成十进制为 -50

    int c = 0B100001; //换算成十进制为 33

    //非法的二进制

    int m = 101010; //无前缀 0B,相当于十进制

    int n = 0B410; //4不是有效的二进制数字

    读者请注意,标准的C语言并不支持上面的二进制写法,只是有些编译器自己进行了扩展,才支持二进制数字。换句话说,并不是所有的编译器都支持二进制数字,只有一部分编译器支持,并且跟编译器的版本有关系。

    下面是实际测试的结果:

    Visual C++ 6.0 不支持。

    Visual Studio 2015 支持,但是 Visual Studio 2010 不支持;可以认为,高版本的 Visual Studio 支持二进制数字,低版本的 Visual Studio 不支持。

    GCC 4.8.2 支持,但是 GCC 3.4.5 不支持;可以认为,高版本的 GCC 支持二进制数字,低版本的 GCC 不支持。

    LLVM/Clang 支持(内嵌于 Mac OS 下的 Xcode 中)。

    2) 八进制

    八进制由 0~7 八个数字组成,使用时必须以0开头(注意是数字 0,不是字母 o),例如:

    //合法的八进制数

    int a = 015; //换算成十进制为 13

    int b = -0101; //换算成十进制为 -65

    int c = 0177777; //换算成十进制为 65535

    //非法的八进制

    int m = 256; //无前缀 0,相当于十进制

    int n = 03A2; //A不是有效的八进制数字

    3) 十六进制

    十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,使用时必须以0x或0X(不区分大小写)开头,例如:

    //合法的十六进制

    int a = 0X2A; //换算成十进制为 42

    int b = -0XA0; //换算成十进制为 -160

    int c = 0xffff; //换算成十进制为 65535

    //非法的十六进制

    int m = 5A; //没有前缀 0X,是一个无效数字

    int n = 0X3H; //H不是有效的十六进制数字

    4) 十进制

    十进制由 0~9 十个数字组成,没有任何前缀,和我们平时的书写格式一样,不再赘述。

    二进制数、八进制数和十六进制数的输出

    C语言中常用的整数有 short、int 和 long 三种类型,通过 printf 函数,可以将它们以八进制、十进制和十六进制的形式输出。上节我们讲解了如何以十进制的形式输出,这节我们重点讲解如何以八进制和十六进制的形式输出,下表列出了不同类型的整数、以不同进制的形式输出时对应的格式控制符:

    short

    int

    long

    八进制

    %ho

    %o

    %lo

    十进制

    %hd

    %d

    %ld

    十六进制

    %hx 或者 %hX

    %x 或者 %X

    %lx 或者 %lX

    十六进制数字的表示用到了英文字母,有大小写之分,要在格式控制符中体现出来:

    %hx、%x 和 %lx 中的x小写,表明以小写字母的形式输出十六进制数;

    %hX、%X 和 %lX 中的X大写,表明以大写字母的形式输出十六进制数。

    八进制数字和十进制数字不区分大小写,所以格式控制符都用小写形式。如果你比较叛逆,想使用大写形式,那么行为是未定义的,请你慎重:

    有些编译器支持大写形式,只不过行为和小写形式一样;

    有些编译器不支持大写形式,可能会报错,也可能会导致奇怪的输出。

    注意,虽然部分编译器支持二进制数字的表示,但是却不能使用 printf 函数输出二进制,这一点比较遗憾。当然,通过转换函数可以将其它进制数字转换成二进制数字,并以字符串的形式存储,然后在 printf 函数中使用%s输出即可。考虑到读者的基础还不够,这里就先不讲这种方法了。

    【实例】以不同进制的形式输出整数:

    #include

    int main()

    {

    short a = 0b1010110; //二进制数字

    int b = 02713; //八进制数字

    long c = 0X1DAB83; //十六进制数字

    printf("a=%ho, b=%o, c=%lo\n", a, b, c); //以八进制形似输出

    printf("a=%hd, b=%d, c=%ld\n", a, b, c); //以十进制形式输出

    printf("a=%hx, b=%x, c=%lx\n", a, b, c); //以十六进制形式输出(字母小写)

    printf("a=%hX, b=%X, c=%lX\n", a, b, c); //以十六进制形式输出(字母大写)

    return 0;

    }

    运行结果:

    a=126, b=2713, c=7325603

    a=86, b=1483, c=1944451

    a=56, b=5cb, c=1dab83

    a=56, b=5CB, c=1DAB83

    从这个例子可以发现,一个数字不管以何种进制来表示,都能够以任意进制的形式输出。数字在内存中始终以二进制的形式存储,其它进制的数字在存储前都必须转换为二进制形式;同理,一个数字在输出时要进行逆向的转换,也就是从二进制转换为其他进制。

    输出时加上前缀

    请读者注意观察上面的例子,会发现有一点不完美,如果只看输出结果:

    对于八进制数字,它没法和十进制、十六进制区分,因为八进制、十进制和十六进制都包含 0~7 这几个数字。

    对于十进制数字,它没法和十六进制区分,因为十六进制也包含 0~9 这几个数字。如果十进制数字中还不包含 8 和 9,那么也不能和八进制区分了。

    对于十六进制数字,如果没有包含 a~f 或者 A~F,那么就无法和十进制区分,如果还不包含 8 和 9,那么也不能和八进制区分了。

    区分不同进制数字的一个简单办法就是,在输出时带上特定的前缀。在格式控制符中加上#即可输出前缀,例如 %#x、%#o、%#lX、%#ho 等,请看下面的代码:

    #include

    int main()

    {

    short a = 0b1010110; //二进制数字

    int b = 02713; //八进制数字

    long c = 0X1DAB83; //十六进制数字

    printf("a=%#ho, b=%#o, c=%#lo\n", a, b, c); //以八进制形似输出

    printf("a=%hd, b=%d, c=%ld\n", a, b, c); //以十进制形式输出

    printf("a=%#hx, b=%#x, c=%#lx\n", a, b, c); //以十六进制形式输出(字母小写)

    printf("a=%#hX, b=%#X, c=%#lX\n", a, b, c); //以十六进制形式输出(字母大写)

    return 0;

    }

    运行结果:

    a=0126, b=02713, c=07325603

    a=86, b=1483, c=1944451

    a=0x56, b=0x5cb, c=0x1dab83

    a=0X56, b=0X5CB, c=0X1DAB83

    十进制数字没有前缀,所以不用加#。如果你加上了,那么它的行为是未定义的,有的编译器支持十进制加#,只不过输出结果和没有加#一样,有的编译器不支持加#,可能会报错,也可能会导致奇怪的输出;但是,大部分编译器都能正常输出,不至于当成一种错误。

    更多相关内容
  • (2)十进制转二进制:十进制整数转二进制数:“除以2取余,逆序排列”(短除反取余法)十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)(3)八进制与二进制的转换:二进制数转换成八进制数:从小数点开...

    满意答案

    00e27ab806e4881f8254fe7ae8741834.png

    superad88

    2018.07.28

    00e27ab806e4881f8254fe7ae8741834.png

    采纳率:56%    等级:8

    已帮助:116人

    小数点的进制转换包含二进制、八进制、十进制、十六进制。(1)二进制转十进制: 方法:“按权展开求和”。(2)十进制转二进制:十进制整数转二进制数:“除以2取余,逆序排列”(短除反取余法)十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)(3)八进制与二进制的转换:二进制数转换成八进制数:从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制数的数字表示,不足3位的要用“0”补足3位,就得到一个八进制数。八进制数转换成二进制数:把每一个八进制数转换成3位的二进制数,就得到一个二进制数。(4)十六进制与二进制的转换:二进制数转换成十六进制数:从小数点开始,整数部分向左、小数部分向右,每4位为一组用一位十六进制数的数字表示,不足4位的要用“0”补足4位,就得到一个十六进制数。十六进制数转换成二进制数:把每一个十六进制数转换成4位的二进制数,就得到一个二进制数。下面简单说明一下以上4种进制: 2进制,用两个阿拉伯数字:0、1; 8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7; 10进制,用十个阿拉伯数字:0到9; 16进制,用十六个阿拉伯数字,可是阿拉伯人只发明了10个数字? 所以实际上16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。追问: 我要答案,不要原理。。。

    00分享举报

    展开全文
  • 这篇文章主要介绍了使用Python内置的模块与函数进行不同进制的转换的方法,Python也使得读取纯二进制文件内容非常方便,需要的朋友可以参考下 binascii 模块: 它包含一个把二进制数值转换成十六进制的函数,...
  • I am implementing a simple DHT using the Chord protocol in Java. The details are not important but the thing I'm stuck on is I need to hash strings and then see if one hashed string is "less than" ano...

    I am implementing a simple DHT using the Chord protocol in Java. The details are not important but the thing I'm stuck on is I need to hash strings and then see if one hashed string is "less than" another.

    I have some code to compute hashes using SHA1 which returns a 40 digit long hex string (of type String in Java) such as:

    69342c5c39e5ae5f0077aecc32c0f81811fb8193

    However I need to be able to compare two of these so to tell, for example that:

    0000000000000000000000000000000000000000

    is less than:

    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

    This is the complete range of values as the 40 digit string is actually representing 40 hex numbers in the range 0123456789ABCDEF

    Does anyone know how to do this?

    Thanks in advance.

    解决方案

    The values 0..9 and A..F are in hex-digit order in the ASCII character set, so

    string1.compareTo(string2)

    should do the trick. Unless I'm missing something.

    展开全文
  • 输入三个2 进制的数,要求将这三个二进制数对应的十进制整数按从小到大的顺序输。 要求程序定义一个bToD()函数和一个main()函数,bToD() 函数的功能是将二进制数转化为十进制整数,其余功能在main()函数中实现。 int...

    题目描述
    输入三个2 进制的数,要求将这三个二进制数对应的十进制整数按从小到大的顺序输。
    要求程序定义一个bToD()函数和一个main()函数,bToD() 函数的功能是将二进制数转化为十进制整数,其余功能在main()函数中实现。
    int bToD(char str[])
    {
    //函数返回二进制数str对应十进制整数
    }

    输入
    输入三个2 进制的数,用空格隔开。所有数据均为非负数,二进制数长度不超过30。

    输出
    将对应的十进制整数按从小到大的顺序输出

    样例输入

    1101  110  1011
    

    样例输出

    6 11 13
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int bToD(char s[])
    {
        int len=strlen(s),sum=0,b=2;
            for(int j=len-1;j>=0;j--)
            {
                if(j==len-1)
                {
                    sum+=s[j]-'0';   //转化为数字。
                }
                else
                {
                    sum+=(s[j]-'0')*b;
                    b*=2;
                }
            }
            return sum;
    }
    int main()
    {
        char s[50];
        int a[5]={0};
        for(int i=0;i<3;i++)
        {
            scanf("%s",&s);
            a[i]=bToD(s);
        }
        for(int i=1;i<3;i++)
        {
            for(int j=0;j<3-i;j++)    //排序
            {
                if(a[j]>a[j+1])
                {
                    int t=a[j+1];
                    a[j+1]=a[j];
                    a[j]=t;
                }
            }
        }
        for(int i=0;i<3;i++)
        {
            if(i!=2)printf("%d ",a[i]);//格式要求,最后一个数没空格。
            else printf("%d",a[i]);
        }
        return 0;
    }
    
    

    欢迎指导;

    展开全文
  • include<stdio.h> include<stdlib.h> int main() { int n = 0; int m = 0; int i = 0; int count = 0; scanf("%d %d", &n, &m); for (i = 0; i < 32; i++) ... i) &...
  • 不同进制比较

    2019-07-14 19:06:14
    011是8进制表示, 十进制值为9 11本身就是十进制 0x11是16进制, 十进制值为17
  • 不同进制数之间的转换

    千次阅读 2019-11-19 15:34:52
    一、都有哪些进制? ①二进制: 只有0.1两个数字,以0b开头; ②八进制: 0.1.2.3.4.5.6.7,以0开头; ③十进制: 0.1.2.3.4.5.6.7.8.9 ...给目标数字除以进制数,写余数,除到商为0,余数颠倒; 例如: 18...
  • 数字转换二进制比较大小

    千次阅读 2014-06-25 10:55:31
    1、将要比较的两个数字分别转换成二进制数字;  2、计算两个二进制数字中1的个数,个多的数字为两者中的大者;  3、负数按照其绝对值进行比较; 请利用地球人发明的计算机程序逼近都教授的特异功能,实现时...
  • 【导读】为了帮助广大考生更好的备考,中公事业单位考试网提供2016年计算机专业知识《不同进制之间的转换(二)》学习,为考生定制计算机基础知识复习计划。1.将十进制转换成其他进制十进制数转换为等值的二进制、八...
  • 输入三个2 进制的数,要求将这三个二进制数对应的十进制整数按从小到大的顺序输。 要求程序定义一个bToD()函数和一个main()函数,bToD() 函数的功能是将二进制数转化为十进制整数,其余功能在main()函数中实现。 int...
  • 给你个痛快的,随便输入吧……输入一百个十六进制也能帮你转换完成……#include#include#defineN200intmultiply(int*b,intm,intn,intk){inti,j,temp,flag,*p;for(i=flag=0;i{flag=temp=0;p=b;for(j=0;j<=k;j++){p...
  • 进制数转化为其它进制 1.十进制转化为二进制数进制数15 上图中箭头的方向即为二进制数中从低位到高位(从右往左)的顺序, 二进制数为:0000 0000 0000 0000 0000 0000 0000 1111 2.十进制数转化为八...
  • 进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,...那么Java中的二进制又是怎么样的呢?让我们一起来揭开它神秘的面...
  • 16进制 10进制00 001 102 2.. .09 90A 100B 110C 120D 130E 140F 1510 161F 3120 32将数字符号按序排列成位,并遵照某种由低位到高位的进位 方式计数表示数值的方法,...
  • 将原来整型换算成二进制数 PS : 二进制数如何换算 例子:整数125 笔算:1111101 或者用计算机里面自带的计算器 反码 将原码的符号位不变,其他位依次按位取反就可以得到了 反码+1就得到补码 PS:
  • 更新:发现了三倍的加速。在这是一种在压缩位上使用numpy来节省内存的方法。要在这种格式与0s和1类型的uint8s之间进行转换,numpy提供了packbits和{}函数。在下面的代码预计算所有2^16模式的和,这些模式可以由16位...
  • 一、二进制a = 1bin(a)-->ob1 #python内置方法ob 表示二进整型制格式二、难缠符号1、位移二进制的位>> 右位移,想象成 切肉切去最后一位例如 x >> y #先转成二进制再位移计算公式:x/(2**y)<< ...
  • 例如,二进制数1101可表示为: 1 x 2^3 + 1 x 2^2 + 0 x 2^1 + 1 x 2^0 以十进制数表示为: 1 x 8 + 1 x 4 + 0 x 2 + 1 x 1 = 13 用二进制系统可以把任意整数(如果有足够的位)表示为0和1的组合。由于数字计算机通过...
  • 1个字节:最大0xFF = 255(存储类型byte和char) 2个字节:最大0xFF FF = 65535(存储类型shot int) 4个字节:最大0xFF FF FF FF= 4294967295(存储类型int 、long) 8个字节:最大0xFF FF FF FF...十六进制(英文名称:He...
  • 进制数、八进制数和十六进制数的输入 一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种...
  • CodeForces 602A Two Bases(简单题,比较两个不同进制数大小)——Codeforces Beta Round #333 (Div. 2)
  • 计算机中的进制数都是什么意思啊?來源:互聯網2009-11-11 23:31:00評論分類: 教育/科學 >> 學習幫助問題描述:这些进制数都代表些什么 2进制和10进制还有16进制都有什么分别它们都是些什么意思 我从网上找到这...
  • 十六进制转换有16进制每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F16个大小不同,即逢16进1,其中用A,B,C,D,E,F(字母使用大写)这六个字母来分别表示10,11,12,13,14,15...
  • 写一个函数,输入一个十六进制数,输出相应的十进制数。基本思路是16进制数以字符串输入,然后经过转变为相应的10进制数,主要处理A~F六个字母对应的值,相应的程序如下:#include#include#includeint main( ){char ...
  • 不同进制之间的转化

    2020-02-15 19:37:27
    将二进制、八进制、十六进制转换为十进制进制、八进制和十六进制向十进制转换都非常容易,就是“按权...通俗的理解,假设一个多位(由多个数字组成的)某位上的数字是 1,那么它所表示的数值大小就是该位的...
  • 一、二进制数、位和字节 1、二进制数 以为基地表示的数字称为二进制数。二进制中的2和十进制中的10作用相同。二进制数1101可表示为: 1*23+1*22+0*21+1*20 以十进制数表示 1*8+1*4+0*2+1*1 = 13 二进制系统可以把...
  • 写了一个进制转换的程序,可以转换比较大的,以及指定较大的进制,速度还可以。 转换的思路都在代码里面,使用。 /** * 进制转换 * 将10进制数字转换为其他进制 * 思路: * 假设有一堆沙子,用多个不同大小的...
  • 请设计一个栈,实现十进制数转任意进制数 2.代码实现 #include <iostream> using namespace std; #define MAXSIZE 100 typedef struct { int *base;//栈底指针 int *top;//栈顶指针 int stacksize...
  • 并行口C.IDE接D.SCSI接口2目前世界上不同型号的计算机,就其工作原理而言,一般都认为是基于冯·诺伊曼提出的()A.二进制原理B.布尔代数原理C.摩尔定律D.存储程序控制原理3目前微机所用的总线标准有多种,下面给出的四个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 365,485
精华内容 146,194
热门标签
关键字:

怎样比较不同进制数的大小