精华内容
下载资源
问答
  • 二进制数、八进制和十六进制的表示一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种特殊...

    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 进制的,要求将这三个二进制数对应的十进制整数按从小到大的顺序输。 要求程序定义一个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;
    }
    
    

    欢迎指导;

    展开全文
  • (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分享举报

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

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

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

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

    样例输入 Copy
    1101 110 1011
    样例输出 Copy
    6 11 13

    #include<stdio.h>
    #include<string.h>
    int bToD(char str[]);
    int main()
    {
    	char a[40], b[40], c[40];
    	int a1, b1, c1, t;
    	scanf("%s%s%s",a,b,c);
    	a1=bToD(a);
    	b1=bToD(b);
    	c1=bToD(c);
    	if(c1>b1)
    	{
    		t=c1;c1=b1;b1=t;
    	}
    	if(b1>a1)
    	{
    		t=a1;a1=b1;b1=t;
    	}
    	if(c1>b1)
    	{
    		t=c1;c1=b1;b1=t;
    	}
    	printf("%d %d %d ",c1, b1, a1);
    } 
    int bToD(char str[])
    {
    	int n=0, i;
    	for(i=0;i<strlen(str);i++)
    	{
    		n=n*2+str[i]-'0';
    	}
    	return n;
    }
    
    展开全文
  • 1142: 二进制数大小 时间限制: 1 Sec 内存限制: 128 MB 提交: 6005 解决: 3790 [状态] [讨论版] [提交] [命题人:admin] 题目描述 输入三个2 进制的,要求将这三个二进制数对应的十进制整数按从小到大的顺序输。 ...
  • 1417 二进制数大小

    2020-12-19 23:50:51
    输入三个2 进制的,要求将这三个二进制数对应的十进制整数按从小到大的顺序输。 要求程序定义一个bToD()函数和一个main()函数,bToD() 函数的功能是将二进制数转化为十进制整数,其余功能在main()函数中实现。 int...
  • 二进制原理B.布尔代数原理C.摩尔定律D.存储程序控制原理3目前微机所用的总线标准有多种,下面给出的四个缩写名中不属于描述总线标准的是()A.VGAB.USBC.ISAD.PCI4内存按工作原理可以分为()这几种...
  • 2007-04-06二进制二进制怎么理解~!二进制18世纪德国数理哲学大师莱布尼兹从他的传教士朋友鲍威特寄给他的拉丁文译本《易经》中,读到了八卦的组成结构,惊奇地发现其基本素数(0)(1),即《易经》的阴爻- -和__阳爻,...
  • 一个字节的二进制数是:8位;一个字节等于二进制位的八位。字节作为一个单位来处理的一个二进制数字串,最常用的字节是八位的字节,即它包含八位的二进制数。字节(Byte )是计算机信息技术用于计量存储容量的一种计量...
  • 四位二进制数的可控加法实验报告一、实验目的。1.了解四位二进制数运算的基本原理,制定设计方案。2.利用ISE软件进行可编程逻辑器件设计,完成逻辑仿真功能。3.使用编译器将设计实现,下载到BASYS2实验板上进行调试和...
  • 二进制数数

    2021-01-31 14:33:22
    二进制数数 问题描述 给定L,R。统计[L,R]区间内的所有二进制下包含的“1”的个数之和。如5的二进制为101,包含2个“1”。 输入格式 第一行包含2个L,R 输出格式 一个S,表示[L,R]区间内的所有二进制下...
  • matlab二进制运算

    千次阅读 2021-04-23 10:56:52
    ////////////////////////////////////////// unit uint8([]) uint16([]) uint64([]) dec2bin(一个十进制):将十进制转化为二进制 dec2hex(一个十进制):将十进制转化为十六进制 hex2dec十六进制转换为...
  • 先将一个十进制转换成二进制数; (构造一个0 ~2^30的数组,用number和数组中每个元素逆序比大小, 如果number >= quan_arr[i], 就让number -= quan_arr[i]; 并且该位置的就置为1,否则该位置的置为0, ...
  • 二进制数(11110.11) 2 化为十进制,下列结果正确的是______。Linux系统每个文件的访问权限是如何表示的?如图所示,电路的电流是()。 A. B. C. D.以上都不对函数,的图像与直线有且仅有两个不同的交点,则的...
  • 任务:使用 max 函数得到两个中的较大者并输出,这两个通过 input 获取,第一个为二进制数,第二个为十六进制。 """ #请在下面的Begin-End之间按照注释中给出的提示编写正确的代码 ##########Begin#########...
  • 1,binlog_cache_size和max_binlog_cache_size表示的为每个session的事物分配的缓存当插入或者修改数据的时候,不会立刻写入磁盘,而是会缓存起来,缓存的大小由binlog_cache_size 来控制mysql> show variables ...
  • 十进制57.2 D分别转换成二进制数______________________B、八进制___计算机二级作业15.十进制57.2 D分别转换成二进制数______________________B、八进制______________________O、十六进制_____________ H...
  • 满意答案hebi3332013.08.31采纳率:56%等级:12已帮助:12208人如果说你的困难是处理二进制,这个例子或许可以对你有帮助:#include #include long findHexTar(short tar, FILE *fp){long lSize;char* buffer;size_t...
  • 输出要求:二进制数 样例输入:2af 样例输出:1010101111 样例输入:38 样例输出:111000 #include<stdio.h> #include<math.h> int main() { int a[100], i = 0, j, k, m = 0, n = 0, sum1; char c...
  • 1、计算机的数制介绍数制:计数的方法,指用一组固定的符号和统一的规则来...2、数制的表示方法3、数制的计算4、进制之间的转换4.1、正整数的十进制转换二进制将一个十进制除以二,得到的商再除以二,依此类推直到...
  • 文中涉及:十进制与十六进制的互相转换二进制与十进制的互相转换二进制与十六进制的互相转换1.将十进制的转换为十六进制的请使用to_char函数。 数据库中16进制的表达是按照字符串来描述的,所以将十进制的转换...
  • 十进制转二进制

    2021-06-24 12:40:04
    十进制转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制的整数部分和小数部分分别转换后,再加以合并。中文名十进制转二进制外文名Decimal system to binary system适用领域电子、编程、编码...
  • 输入三个2 进制的,要求将这三个二进制数对应的十进制整数按从小到大的顺序输。 要求程序定义一个bToD()函数和一个main()函数,bToD() 函数的功能是将二进制数转化为十进制整数,其余功能在main()函数中实现。 int...
  • 二进制数据是用0和1两个数码来表示的。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是...
  • 二进制到十进制数字转换使用加权列来标识数字的顺序以确定数字的最终值将二进制转换为十进制(base-2到base-10) )数字和背面是一个重要的概念,因为二进制编号系统构成了所有计算机和数字系统的基础。十进制或...
  • 二进制和量化编码

    2021-04-18 00:11:20
    小数 10 进制转二进制: 如 0.8, 转为 2 进制要: 0.8×2=1.6→10.6×2=1.2→10.2×2=0.4→00.4×2=0.8→00.8×2=1.6→1⋮×2=⋮→⋮ \begin{aligned} 0.8 \times 2=1.6\to1 \\ 0.6\times2=1.2\to1\\ 0.2\times2=0.4...
  • 一:目的将十进制整数转化为二进制与十六进制输出。二:技术。1.利用for循环和数组知识将十进制转化为二进制输出。图片发自简书App2.利用for循环和数组知识将十进制转化为十六进制输出。图片发自简书App3.数组的定义,...
  • 二进制数据是用0和1两个数码来表示的。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。二进制数据也是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,其权的大小顺序为2^2、2^1、2^...
  • 一、二进制 十进制和十六进制 X进制 逢X进1 数制的计算 二、数制的转换 十进制--->二进制 十进制--->十六进制 二进制--->十进制 二进制--->十六进制 十六进制--->二进制 十六进制--->十...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 583,896
精华内容 233,558
关键字:

二进制数如何比大小