C语言学习笔记---5.C语言中的进制表示及输出

在C语言中,对于数值的表示大多情况下使用的都是十进制,除此之外还有二进制、八进制和十六进制。在不明确标明进制时,默认是十进制数,但为了区别各不同进制间的表示,需要在数值前加上特定的字符,即添加前缀。

二进制数表示

二进制是由0和1组成,使用二进制表示数值时,需要在数值前添加0b或0B,如:

//合法的二进制
int a = 0b101;   //换算为十进制是5
int b = -0b110010;   //换算为十进制是-50
int c = 0B100001;   //换算为十进制是33

//非法的二进制
int m = 101010;   //无前缀0B,默认为十进制
int n = 0B410;   //4不是有效的二进制数字

【需要注意的是,有些低版本的编译器不支持二进制表示,但高版本支持!】

八进制数表示

八进制是由0~7八个数字组成,使用时必须以数字0开头,如:

//合法的八进制
int a = 015;   //换算为十进制是13
int b = -0101;   //换算为十进制是-65
int c = 0177777;   // 换算为十进制是65535

//非法的八进制
int m = 256;   //无前缀0,默认十进制
int n = 03A2;   //虽然有八进制前缀0,但是A属于无效的八进制数

十六进制数表示

十六进制是由数字0-9和字母A-F或a-f组合组成,使用时必须以0X或0x开头,如:

//合法的十六进制
int a = 0X2A;   //换算成十进制是42
int b = -0Xa0;   //换算成十进制是-160
int c = 0xffff;   //换算成十进制是65535

//非法的十六进制
int m = 5A;   //缺少前缀,且A不属于十进制数,无效数值
int n = 0x3H;   //前缀正确,但H不是有效的十六进制数

各进制数的输出表示

在C语言中,常用的是int、short、long,可以通过printf()函数进行格式化输出,也可以对其他进制数形式进行输出。
在这里插入图片描述

其中十六进制数值的输出表示有大小写之分:

%hx、%x、%lx中x是小写字母,表示将十六进制数中字母以小写形式输出;
%hX、%X、%lX中X是大写字母,表示将十六进制数中字母以大写形式输出。
#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;
}

在这里插入图片描述
但观察上面例子,可以发现:
对于八进制数字,可能会与十进制、十六进制混淆,因为八进制、十进制和十六进制都可以包含0-7;
对于十进制数字,可能会与十六进制混淆,因为十六进制也包含0-9;若十进制数字只有0-7,也会与八进制数混淆;
对于十六进制数字,如果不含a-f或A-F,就会与十进制数混淆;如果也没有8和9,也会与八进制数混淆。
故,需要在格式化输出时加上额外的输出前缀:

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

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值