2.1 C语言中的进制数的表示

本文详细介绍了C语言中二进制、八进制、十进制和十六进制数字的表示方法及其对应的输出格式控制符。通过具体的示例代码展示了如何正确地使用这些进制并在输出时带上特定的前缀。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进制的表示方法

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

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

//正确的二进制
int a=ob110		//换算成十进制为6
int b=-0b1101001	//换算成十进制为105
int c=OB10001		//换算成十进制为17
//错误二进制
int a=110 		//没有前缀,相当于十进制
int b=OB510		//5不是有效的二进制数

注意:并不是所有的编译器都支持二进制数字,只有一部分编译器支持,并且跟编译器的版本有关系

2).八进制
八进制由 0~7 八个数字组成,使用时必须以0开头(注意是数字 0,不是字母 o)

//正确的八进制数
int a = 023;  //换算成十进制为 19
int b = -0521;  //换算成十进制为 -337
int c = 01787;  //换算成十进制为 959
//错误的八进制
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输出一个单一的字符
%hd、%d、%ld以十进制、有符号的形式输出 short、int、long 类型的整数
%hu、%u、%lu以十进制、无符号的形式输出 short、int、long 类型的整数
%ho、%o、%lo以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数
%#ho、%#o、%#lo以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数
%hx、%x、%lx、%hX、%X、%lX以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。
%#hx、%#x、%#lx、%#hX、%#X、%#lX以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。
%f、%lf以十进制的形式输出 float、double 类型的小数
%e、%le、%E、%lE以指数的形式输出 float、double 类型的小数。如果 e 小写,那么输出结果中的 e 也小写;如果 E 大写,那么输出结果中的 E 也大写。
%g、%lg、%G、%lG以十进制和指数中较短的形式输出 float、double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。
%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

区分不同进制数字的一个简单办法就是,在输出时带上特定的前缀

#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;
}

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

### Windows 11 中将 D 空间分配给 C 方法 #### 使用内置工具 Disk Management 进行分区调整 在 Windows 11磁盘管理工具中可以直接对硬分区进行修改。然而,当尝试直接扩展 C 时可能会发现选项处于不可用状态,这是因为要扩展的目标卷旁边没有足够的连续未分配空间[^1]。 为了实现这一目标,可以按照如下方式操作: - **准备阶段** 确保重要数据已备份以防意外丢失。打开命令提示符(管理员权限),通过 `diskpart` 命令启动磁盘分割实用程序,并执行相应指令来查看当前磁盘布局以及是否有可用于扩展的自由空间。 ```batch DISKPART> list disk DISKPART> select disk 0 DISKPART> list partition ``` - **创建未分配空间** 对于希望从中获取额外空间的逻辑驱动器(如 D:\),可以通过图形界面中的“压缩卷”功能释放一部分容量作为未分配区域。需要注意的是,新产生的未分配空间应当紧邻着打算扩增的那个主分区(即 C:\)以便后续能够顺利合并两者之间的边界[^5]。 如果两者的相对位置并不满足上述条件,则可能需要先移动某些现有分区的位置以腾出适当的空间用于连接两个待组合的部分。不过这项工作通常较为复杂且风险较大,建议采用专业的第三方软件辅助完成[^4]。 - **应用 Partition Assistant 或 类似工具** 考虑到实际应用场景下的局限性潜在的风险因素,在面对复杂的多分区结构时推荐借助可靠的第三方应用程序来进行更精细的操作。这类工具往往提供了更加直观易懂的人机交互流程指导用户逐步达成目的而不必担心误触关键设置造成不必要的麻烦。 例如,“Partition Assistant Standard Edition” 是一款免费但功能强大的解决方案之一,支持多种常见的磁盘重组需求,包括但不限于本案例所描述的情形。只需简单几步即可安全有效地转移所需资源至系统所在分区从而缓解其存储压力的同时保持整体系统的稳定性与可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值