前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >C语言的进制表示【八进制,十六进制】

C语言的进制表示【八进制,十六进制】

作者头像
黎鹤舞
发布2024-11-09 08:35:34
发布2024-11-09 08:35:34
16000
代码可运行
举报
运行总次数:0
代码可运行

C语言的进制表示【八进制,十六进制】

题目介绍

故事的起因是今天在群里看到有人发来的问题

image-20241108131949102
image-20241108131949102
代码语言:javascript
代码运行次数:0
复制
//原题目
int main() {

	int a = 0123;
	printf("%d ", a);
	int b = a << 2, c = a >> 2;
	printf("a=%d,b=%d,c=%d\n", a, b, c);
	return 0;
}

刚拿到题目时,我也有点懵,0123的二进制不应该是 0000 0001 0010 0011 吗?

为什么左移两位后会变成了 [0000 0000 0101 0011]2 = [83]10 了呢?

我在我的环境上调试了一下过程,如下图所示

过程1
过程1
过程2
过程2

发现 a 居然是[0053]16 = [0000 0000 0101 0011]2,并非我所想的 0000 0001 0010 0011

经过一番研究后发现是C语言的进制问题,这里的 0123八进制

C语言的进制表示

在 计算机中,整数可以使用多种进制表示,包括 十进制八进制十六进制二进制

以下是C语言为实例的每种进制的表示方法:

1. 十进制
  • 默认情况下,整数是以十进制表示的。
  • 不需要前缀,直接写数字即可
2. 八进制
  • 八进制以 0 前缀开头。
  • 八进制数字只能包含 0-7,否则会引发错误
3. 十六进制
  • 十六进制以 0x0X 前缀开头。
  • 使用数字 0-9 和字母 A-F(不区分大小写)来表示
4. 二进制
  • 0b0B 前缀来表示二进制数
    • 【注】较早版本的C语言 不直接支持二进制表示,通常需要用位运算或一些库函数来处理二进制数。

以下为代码实例

代码语言:javascript
代码运行次数:0
复制
#include<stdio.h>

int main() {
	int a = 123;   // 十进制 123
	int b = 0123;  // 八进制 0123,等于十进制 83
	int c = 0x1A3;  // 十六进制 0x1A3,等于十进制 419
	int d = 0b1011;  // 二进制 1011,等于十进制 11 

	printf("a=%d  b=%d c=%d  d=%d\n",a,b,c,d);
	return 0;
}
不同进制的C语言测试
不同进制的C语言测试

进制表示总结

进制

表示方法

示例

十进制

默认,无需前缀

int a = 123;

八进制

前缀 0

int b = 0123;

十六进制

前缀 0x 或 0X

int c = 0x1A3;

二进制

0b 或 0B

int d = 0b1011;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C语言的进制表示【八进制,十六进制】
    • 题目介绍
    • C语言的进制表示
      • 1. 十进制
      • 2. 八进制
      • 3. 十六进制
      • 4. 二进制
    • 进制表示总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档