c语言goto为什么最好不要用_C语言十六进制前缀为什么用 0x 呢?

b1cd28628c57451c55e21698dc195442.png

文 章 作者:头条IT刘小虎,本文经作者授权发布,未经授权禁止转载!!!

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

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

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

08453a00f2c615caf5092dc4da23268a.png

类似的,还有将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 作为十六进制数字的前缀。

565f2bd5cf73168399af94d855659452.png

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

2e52f218130f118c33b5edf6155e18bf.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值