C语言允许程序员逐位操作变量,此时,最直观的数字表示方式自然是二进制。不过这样常常会让数字看起来“过长”,例如十进制的 255 使用二进制表示为 11111111,因此,在C语言程序开发中,为了程序员阅读代码的方便,需要逐位操作变量时,常常使用十六进制。0xFF 看起来可比 0b11111111 直观多了。

在C语言中,为什么十六进制的数字前缀用 0x 呢?

在C语言中,十六进制的数字常常以 0x 或者 0X 前缀开头,这是印在很多程序员骨子里的东西。一个有趣的问题是,为什么十六进制数字以 0x 开头呢?这样做有什么历史渊源或者特别的好处吗?

联想一下:C语言中的八进制是以前缀“0”开头的,例如 04524 就表示一个八进制数字,它等于十进制的 2388。现在想象一下,怎样表示十六进制数字呢?能像汇编那样,在数字尾部添加后缀“h”吗?例如,80h 表示十六进制的 80(它等于十进制的 128)。

不幸的是,十六进制数字还有 ABCDEF 字符,如果在某段C语言代码中,出现了字母开头的数字,例如 F0h,C语言编译器是将其解释为变量呢?还是数字呢?因此这样做并不是一个好的选择。

这样做并不是一个好的选择

类似的,还有将 h 放在数字前面,或者 x 放在数字前面表示十六进制,也会带来同样的问题。

事实上,早在上世纪 60 年代,最流行的编程数字系统是十进制和八进制,那个时候的机器中每字节的位数是不确定的,有的机器中每字节有 12 位,还有 24 位,36 位的,可以很好地被 3=log2(8)整除。

BCPL 语言使用符号 8 1234 表示八进制数字,后来 Ken Thompson 根据 BCPL 语言创立了 B 语言,他修改了这一表示方法——使用 0 前缀表示八进制数字,这样的改进带来了一系列好处:对于编译器来说,整型常量总是可以由单个标记(token)组成。

编译器仍然可以准确的识别出这是一个数字。

编译器可以立即识别这是八进制数字。

00005 和 05 是相等的。

不需要使用特殊字符(例如1234表示)。

后来 Thompson 从 B 语言创立C语言时,保留了这一特性。后来发现十六进制数字用起来很方便,选择了 0x 作为十六进制数字的前缀。

简单来说,十六进制的前缀 0x 或者 0X 中的 0 是用于告诉编译器这是一个数字,这有一点点历史渊源在里面,也有一些好处。而 x 则可以认为是任意选择的符号(hexcimal)了。

c语言0x前缀的作用,有趣的问题,C语言程序中,为什么十六进制数字以前缀0x开头呢?...相关推荐

  1. c语言0x前缀的作用,C语言中的十六进制数字为什么以前缀0x开头

    C语言中最直观的数字表示方式自然是二进制.不过这样常常会让数字看起来"过长",在C语言程序开发中,为了程序员阅读代码的方便,需要逐位操作变量时,常常使用十六进制,相对而言更加直观. ...

  2. C语言编程>第二十二周 ③ 下列给定的程序中,函数fun的功能是根据整型形参n,计算如下公式的值:

    例题:下列给定的程序中,函数fun的功能是根据整型形参n,计算如下公式的值: 例如,若n=1000,则应输出0.000155. 注意:不要改动main函数,不能增行或删行,也不能更改程序的结构. 代码 ...

  3. c语言字面量的作用是为变量,C语言 字面量

    在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation). 几乎所有计算机编程语言都具有对基本值的字面量表示,诸如:整数.浮点数以及字符串: 而有很多也对布尔类 ...

  4. c语言空循环的作用是什么意思,C语言空循环和无穷循环有的区别

    跟大家普及下空循环和无穷循环的概念,空循环并不会无休止地进行下去–在重复预先指定的次数后,它就会退出循环.无穷循环会无休止地进行下去,并且永远不会退出循环.把空循环和无穷循环对比一下,就能很好地说明它 ...

  5. C语言日志级别和作用,自己写的C语言通用日志框架,可以控制日志输出等级

    /************************************c语言通用日志框架************************************ * * @author 南栀(ke ...

  6. c语言字面量的作用是为变量,C语言(五) C 全局变量,局部变量,静态变量和常量...

    一. 全局变量 全局变量是在所有函数体的外部定义的,程序的所有部分(其他文件的代码)都可以使用.全局变量不受作用域的影响.全局变量的生命周期一直到程序的结束,全局变量是静态存储方式. 例: #incl ...

  7. android国际化设置语言后不起作用,Android旋转屏幕后国际化语言失效的解决的方法...

    本文已同步至个人博客:liyuyu.cn 近期在项目中使用到了国际化多语言(英文+中文),但在使用时发现了一个问题.当屏幕旋转后.APP语言(中文)自己主动转换为了系统语言(英文).设置了Activi ...

  8. android国际化设置语言后不起作用,Android支持国际化多语言那点事(支持8.0+)

    起因 我们在开发app可能会拓展国外市场,那么对包含英语在内的其它语言支持就很有必要了. 效果 思路 一:添加相关资源文件,并引用. 二:设置configuration,configuration里面 ...

  9. c语言十六进制字符串转整数,C语言-提取字符串中的十六进制数字并转换为一个十进制整数输出...

    问题描述:提取字符串中的十六进制数字并转换为一个十进制整数输出 源代码: /*十六进制转换成十进制*/ #include int main(void) { int i,k; char hexad[80 ...

最新文章

  1. Deep Learning for 3D Point Clouds: A Survey 论文阅读
  2. Hyper-v Server虚拟光纤通道
  3. CUDA tool URL
  4. psycopg2 mysql_使用psycopg2操作PostgreSQL数据库之二
  5. 利用 livy 远程提交 spark作业
  6. axios如何在nodejs项目里封装_【面经】jq 中 ajax 和 axios 区别,瀑布流布局,添加删除事件...
  7. python升级pip在哪儿打开_Linux下升级python和安装pip的详解
  8. jQuery Mobile弹出对话框后不刷新原页面,保持原页面内容不变
  9. C#中其他简单LINQ查询表达式的简单使用介绍
  10. paypalsdk集成php,php核心paypal sdk
  11. React的调和过程(Reconcilliation)
  12. android手机设置固定dns,手机怎么设置dns 手机设置dns方法【详解】
  13. Unity3D 使用UGUI实现公告牌
  14. 重庆市总工会送法到中建三局城建档案馆项目
  15. 常用性能测试工具有哪些
  16. 联想e470加装固态硬盘_ThinkPad E470C怎么安装固态硬盘?
  17. 鸡得呼吸道病会易发啥病 鸡喂什么药预防打喷嚏
  18. 互联网晚报 | 9月15日 星期三 | iPhone 13正式发布;天猫双11正式启动商家报名;华为推出鸿蒙矿山操作系统“矿鸿”...
  19. react中使用enzyme.mount和sinon
  20. HCIP第九天笔记(OSPF的路由回馈、路由策略、以及配置指南)

热门文章

  1. 七牛云这个API,让我轻松搞定Banner背景自动切换的功能
  2. direct wifi 投屏_告别Wifi直接投AOC无线投屏显示器轻松用
  3. [Go实战]怎么写测试类,运用testing.T
  4. cdh6.2离线安装(傻瓜式安装教程)
  5. c++空指针的定义-0L
  6. 软考的意义,要不要考软考
  7. Claymore挖矿软件参数说明
  8. 温湿度记录仪——存储易燃易爆化学危险品和危化品
  9. Android源码目录结构详解(转载)
  10. 不确定性量化 (UQ) 可以显著提高预测准确性,在不确定的世界中获得最佳结果昆士兰大学Mike McKerns-中国学者网