C语言中的二进制数、八进制数和十六进制数

发布时间 2023-07-27 11:12:33作者: FBshark

C语言是一门使用数字的编程语言,其中包括了8进制和16进制的数字表示方法。这两种表示方法都可以用于整数和字符类型。

8进制表示法

8进制数字以数字0(零)和前缀0开头表示。例如,八进制数012表示为十进制的10。

以下是一些示例:

int x = 012; // 八进制的12,等价于十进制的10
int y = 077; // 八进制的77,等价于十进制的63
int z = 0100; // 八进制的100,等价于十进制的64

 

16进制表示法

16进制数字以前缀0x或0X开头表示。在16进制表示法中,除了数字0到9之外,还使用字母A到F(大小写均可)表示数字10到15。例如,十六进制数0x1A表示为十进制的26。

以下是一些示例:

int x = 0x1A; // 十六进制的1A,等价于十进制的26
int y = 0xFF; // 十六进制的FF,等价于十进制的255
int z = 0x10; // 十六进制的10,等价于十进制的16

 

二进制表示法

二进制由 0 和 1 两个数字组成,使用时必须以0b0B(不区分大小写)开头,例如:

//合法的二进制
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 中)。

 

八进制和十六进制的应用

在C语言中,使用八进制和十六进制可以使代码更易读和紧凑。例如,当你需要在代码中使用特定的比特模式时,八进制可以帮助你更好地表示它们。而对于位运算、颜色值、内存地址等需要使用16进制的场景,16进制可以更好地表示这些值。

另外,八进制和十六进制也常常用于编写常量。例如,常量0xFF表示一个字节的所有位都被设置为1,而常量077表示一个字节的前六位都被设置为1。

总结

在C语言中,八进制和十六进制是表示数字的两种常用方式。使用八进制和十六进制可以使代码更易读和紧凑,并且可以方便地表示一些特定的值。在编写C程序时,应该充分利用这两种表示法。