精华内容
下载资源
问答
  • 文章目录一、二进制、八进制、十六进制整数的书写1、二进制2、八进制3、十六进制4、需要注意的坑二、二进制、八进制、十六进制整数的输出四、版权声明 整数是我们生活中常用的数据类型,也是编程中常用的一种数据,...

    整数是我们生活中常用的数据类型,也是编程中常用的一种数据,C语言用int关键字来定义整数变量(int 是 integer 的简写)。

    在定义变量的时候,可以加signed、unsigned、short和long四种修饰符。

    signed:有符号的,可以表示正数和负数。

    unsigned:无符号的,只能表示正数,例如数组的下标、人的身高等。

    short:短的,现在主流的64位操作系统下,整数占用内存4个字节,使用 4
    个字节保存较小的整数绰绰有余,会空闲出两个字节来,这些字节就白白浪费掉了。在C语言被发明的早期,或者在单片机和嵌入式系统中,内存都是非常稀缺的资源,所有的程序都在尽可能节省内存。

    long:长的,更长的整数。

    一、二进制、八进制、十六进制整数的书写

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

    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语言并不支持上面的二进制写法,只是有些编译器自己进行了扩展,才支持二进制数字。换句话说,并不是所有的编译器都支持二进制数字,只有一部分编译器支持,并且跟编译器的版本有关系。

    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是无关紧要的,但是,在C语言中,不要在十进制数前加0,会被计算机误认为是八进制数。

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

    下表是各种进制整数的输出格式。
    在这里插入图片描述

    细心的读者可能会发现,上表中没有二进制的输出格式,虽然部分编译器支持二进制数字的书写,但是却不能使用printf函数输出二进制数。您可以编写函数把其它进制数字转换成二进制数字,并保存在字符串中,然后在printf 函数中使用%s输出。

    示例:

    /*
     *  程序名:book.c,此程序用于演示二进制、八进制、十六进制整数的输出。
     *  作者:C语言技术网(www.freecplus.net) 日期:20190525。
    */
    #include <stdio.h>
    
    int main()
    {
      int ii=100;  // 定义变量ii,赋值十进制的100。
    
      printf("十进制输出结果:%d\n",ii);  // 十进制输出结果:100
    
      printf("八进制、无前缀输出结果:%o\n",ii);  // 八进制、无前缀输出结果:144
      printf("八进制、有前缀输出结果:%#o\n",ii); // 八进制、有前缀输出结果:0144
    
      printf("十六进制、无前缀输出结果:%x\n",ii);  // 十六进制、无前缀输出结果:64
      printf("十六进制、有前缀(小写)输出结果:%#x\n",ii); // 十六进制、有前缀(小写)输出结果:0x64
    
      printf("十六进制、无前缀输出结果:%X\n",ii);  // 十六进制、无前缀输出结果:64
      printf("十六进制、有前缀(大写)输出结果:%#X\n",ii); // 十六进制、有前缀(大写)输出结果:0X64
    }
    

    三、获取视频教程

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

    四、版权声明

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

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

    作者:码农有道

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

    展开全文
  • 一、二进制、八进制十六进制数的表示 一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用...

    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语言并不支持上面的二进制写法,只是有些编译器自己进行了扩展,才支持二进制数字。换句话说,并不是所有的编译器都支持二进制数字,只有一部分编译器支持,并且跟编译器的版本有关系。

    (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 函数,可以将它们以八进制、十进制和十六进制的形式输出。下表列出了不同类型的整数、以不同进制的形式输出时对应的格式控制符:

     shortintlong
    八进制%ho%o%lo
    十进制%hd%d%ld
    十六进制%hx 或者 %hX%x 或者 %X%lx 或者 %lX

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

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

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

    • 有些编译器支持大写形式,只不过行为和小写形式一样;
    • 有些编译器不支持大写形式,可能会报错,也可能会导致奇怪的输出。

    注意,虽然部分编译器支持二进制数字的表示,但是却不能使用 printf 函数输出二进制,这一点比较遗憾。当然,通过转换函数可以将其它进制数字转换成二进制数字,并以字符串的形式存储,然后在 printf 函数中使用%s输出即可。
     

    三、以不同进制的形式输出整数:

    #include <stdio.h>
    
    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 <stdio.h>
    
    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
    

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

    展开全文
  • 十六进制数字

    千次阅读 2007-08-25 18:33:00
    1、十六进制数字书写格式 1.1、基本元素:0-9,A-F 1.2、前缀:如果第一个数字是字母,前面要加零(0) 1.3、后缀:数字后面加上h(或H) 2、十六进制数字正负 2.1、BYTE、WORD、DWORD的最高位分别是右第2、第4、...


    1、十六进制数字书写格式

     1.1、基本元素:0-9,A-F
     
     1.2、前缀:如果第一个数字是字母,前面要加零(0)
     
     1.3、后缀:数字后面加上h(或H)
     
    2、十六进制数字正负

     2.1、BYTE、WORD、DWORD的最高位分别是右数第2、第4、第8位
     
     2.2、最高位数字 >= 8的是负数
     
    3、十六进制数字的相反数

     3.1、用十六进制最大的数字F减去各个位上的数字
     
     3.2、把上一步得到的数字加1
     
    4、N位十六进制表示有符号、无符号数的范围

     4.1、构造了一个最大数字X^n 与0点重合的数字环
     
     4.2、顺时针方向依次是1、2、3 …,逆时针方向依次是 -1、-2、-3 …
     
     4.3、基点对称点的值X^n/2,表示最大的负数
     
    5、十六进制与其他进制的关系

     5.1、十六进制是二进制的压缩表示形式,压缩比1:4
     
     5.2、十六进制和二进制之间采用“查表法”相互转换
     
     5.3、十六进制转换到十进制采用“位权法”,反过来转换采用“取余法” 

    展开全文
  • 二进制以0b开头 八进制以0开头 十六进制以0x开头

    二进制以0b开头
    八进制以0开头
    十六进制以0x开头

    展开全文
  • 6.2 二、八、十六进制数转换到十进制 6.2.1 二进制转换为十进制 6.2.2 八进制转换为十进制 6.2.3 八进制的表达方法 6.2.4 八进制数在转义符中的使用 6.2.5 十六进制数转换成十进制 6.2.6 ...
  • 在上一小节中我们学习了python...那么什么是二进制,什么是十六进制数?他们之间如何转换?又如何与我们熟悉的十进制做转换? 我们很熟悉10进制的计数法,采用0~9,10个数字计数,每逢“十进一”,10称为基数...
  • 计算机中常用到十进制、二进制、八进制十六进制数等,下面就这几种计算机中常用的数制来介绍一下.1.十进制我们平时数数采用的是十进制,这种数据是由十个不同的数字0、1、2、3、4、5、6、7、8、9任意...
  • 二进制、八进制十六进制数的表示一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种特殊...
  • 1.十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,八进制前显示前导0,在十六进制数前显示前导0X。 #include <bits/stdc++.h> using namespace std; int main() { int val = ...
  • 写一个函数,输入一个十六进制数,输出相应的十进制。基本思路是16进制以字符串输入,然后经过转变为相应的10进制,主要处理A~F六个字母对应的值,相应的程序如下:#include#include#includeint main( ){char ...
  • 相关问题十进制,十六进制数,7D,八进制,十六进制数,十六进制,数码,十六进制,其中,十六进制,Python,中,0xad,十六进制,数字,形式,十进制,常数,十六进制,常数,地址,值,十六进制,值,值,之间,冒号,记,法,冒号,十六进制...
  • 八、十六进制数转换到十进制

    万次阅读 2007-09-04 13:28:00
    二、八、十六进制数转换到十进制关键词: 二、八、十六进制数转换到十进制 6.2.1 二进制转换为十进制二进制第0位的权值是2的0次方,第1位的权值是2的1次方……所以,设有一个二进制:0110 0100,转换为10...
  • 咳咳 咳咳 开场还是要像个领导,领导开场都是咳咳 两声,我咳了四声 ...十进制数是组成以10为基础的数字系统,有0,1,2,3, 4, 5, 6, 7, 8, 9十个基本数字组成。 也就是我们现在所学的 逢十进一。 那么二进制
  • 十六进制数互相转换

    2013-08-06 19:33:00
    八进制和十六进制? 编程中,我们常用的还是10进制……必竟C/C++是高级语言。 比如: int a = 100,b = 99; 不过,由于数据计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决...
  • 二进制、八进制十六进制数的表示一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种特殊...
  • 为什么需要八进制和十六进制? 编程中,我们常用的还是10进制……必竟C/C++是高级语言。 比如: int a = 100,b = 99; 不过,由于数据计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地...
  • 二进制、八进制十六进制数的表示一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种特殊...
  • 正文原题:输出一张表,内容是1~126各个数字的十进制,二进制,八进制,十六进制。 初生牛犊啊。。第一反应是:这个计算机应该会自己做吧?我用那什么叫啥来着。。格式控制符就好了吧?一翻书,格式控制符有是有...
  • 写一个函数,输入一个十六进制数,输出相应的十进制。基本思路是16进制以字符串输入,然后经过转变为相应的10进制,主要处理A~F六个字母对应的值,相应的程序如下: #include <stdio.h> #include <...
  • 我们有更多共同的十六进制 1、二进制 2、八进制 3、十进制 4、十六进制 5、十二进制 6、二十四进制 7...... 一、二进制 我们都知道二进制是计算机中运用的较多,由于计算机中仅仅有两种状态(开关或者高电平低电平...
  • 1.十六进制数程序设计经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制的0至15。十六进制的计数方法是满16进1,所以十进制16在十六进制中是10,而十...
  •  十六进制数程序设计经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制的0至15。十六进制的计数方法是满16进1,所以十进制16在十六进制中是10,而十...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,332
精华内容 8,532
关键字:

十六进制数在书写时