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

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

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

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

 %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

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

输出时加上前缀
对于如上l例子如果只看输出结果:

 对于八进制数字,它没法和十进制、十六进制区分,因为八进制、十进制和十六进制都包含 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

十进制数字没有前缀,所以不用加#。

如果感觉不错的话请点赞哟!!!

C语言中的二进制、八进制和十六进制的表示相关推荐

  1. 计算机系统中常用的进制,计算机中常用 二进制 八进制 十进制 十六进制的特点...

    计算机中常用的计数制 用若干数位(由数码表示)的组合去表示一个数,各个数位之间是什么关系,即逢"几"进位,这就是进 位计数制的问题.也就是数制问题.数制,即进位计数制,是人们利用数 ...

  2. c语言位运算八进制转二进制,C语言十进制转换二进制八,十六进制。二进制转十进制。...

    C语言十进制转换二进制八,十六进制. 十进制转二进制有个计算公式,就是除以2取余再倒序显示余数就是了.可以根据公式写.八制进公式也同理.十六进制有点不一样,大于9的要转为字母.A,B,C,D,E,F. ...

  3. 二进制 八进制 十进制 十六进制

    2->8:从个位开始把二进制数三个一组分组,然后每组分别换成8进制, 例:11,101,100 就是分组后的结果 11->3 101->5 100->4 所以结果是354 8- ...

  4. python十六进制转换成八进制_Python 进制转换 二进制 八进制 十进制 十六进制

    全局定义一定不要丢了 全局定义 base = [str(x) for x in range()] + [ chr(x) for x in range(ord('A'),ord('A')+)] 二进制 ...

  5. C语言中 怎样区分八进制 十进制 二进制?

    在C语言里,整数有三种表示形式:十进制,八进制,十六进制. 其中以数字0开头,由0~7组成的数是八进制.以0X或0x开头,由0~9,A~F或a~f 组成是十六进制.除表示正负的符号外,以1~9开头,由 ...

  6. 二进制八进制十进制十六进制及原码反码补码

    1.进制的介绍 定义:进位制,人们规定的一种进位方式:表示某一位置上的数,运算时是逢X进一位. 十进制是逢十进一:二进制是逢二进一,八进制是逢八进一: 常见进制:二进制,八进制,十进制,十六进制: 学 ...

  7. 二进制 八进制 十进制 十六进制 之间进制转换(图解篇)

    一.本文所涉及的内容(Contents)                      目录 一.本文所涉及的内容(Contents) 二.背景(Contexts) 三.进制转换算法(Convert) ( ...

  8. 【笔记】二进制八进制十进制十六进制互转详细教程和范例

    最近复习之前的笔记基础.又把进制转换理解了一遍.放在这里以后备查.同时作为分享. 二进制转换八进制十进制十六进制 例: 11010 二进制转换八进制 需要2进制数字为每3位分组的十进制数,不足3位的倍 ...

  9. 二进制 八进制 十进制 十六进制的相互转换(精简总结)

    之前看到的都是铺垫这术语那术语的,看了半天,还不知道怎么处理.这里就根据各种文章和自己的理解总结一小下下,  不一定准确,省略一些概念等繁琐的陈述,直接上结论 1.二进制转八进制:以小数点为分界线,各 ...

最新文章

  1. 王飞跃谈GE艰难的数字化转型启示:从工业智联网到工业5.0
  2. python中yield使用
  3. SQL2008无法连接到.\SQLEXPRESS,用户'sa'登录失败(错误18456)图文解决方法
  4. Android Crash分析工具arm-eabi-addr2line
  5. mysql判断表存在的sql语句_SQL 语句判断已知表是否存在_MySQL
  6. java 数组存入数据库_Java中关于二维数组的理解与使用
  7. Jmeter性能测试工具Timer定时器详解
  8. pivot unpivot_静态和动态SQL Pivot和Unpivot关系运算符概述
  9. protocol buffer java_Protocol Buffer Java实例
  10. MySQL数据库的主键和外键详解
  11. ubuntu nsight使用
  12. 5G+折叠屏:华为Mate Xs打造多项创新体验
  13. vue3项目全家桶知识
  14. 百度接口API的使用
  15. python程序下载腾讯企业邮箱附件_获取腾讯企业邮箱通讯录python脚本(带登录功能)...
  16. 三本 计算机专业,四川哪些三本大学的计算机专业最好?
  17. 高并发网站架构与正态分布的前生今世
  18. 2022年最新江西水利水电施工安全员考试题库及答案
  19. IC数字芯片学习各类公众号汇总
  20. 非冯诺依曼体系计算机,一种新非冯·诺依曼计算机体系结构.pdf

热门文章

  1. c语言atof字母,C语言字符转换之atof()
  2. Win10网络共享设置的方法步骤
  3. Foxmail记事插入的表格怎么设置单元格边距
  4. Win11新特性:在平板锁屏界面还有酷炫的3D视差效果
  5. windows7怎么清空电脑只剩系统
  6. 谷歌Chrome:将逐步阻止浏览器不安全下载内容
  7. 物联网协议比较 MQTT CoAP RESTful/HTTP XMPP
  8. eclipse中The JSP specification requires that an attribute name is preceded by whitespace
  9. Spring AOP事务管理(使用切面把事务管理起来)
  10. 出现503错误 怎么办