文章目录
- C语言的进制表示【八进制,十六进制】
- 题目介绍
- C语言的进制表示
- 1. 十进制
- 2. 八进制
- 3. 十六进制
- 4. 二进制
- 进制表示总结
C语言的进制表示【八进制,十六进制】
题目介绍
故事的起因是今天在群里看到有人发来的问题
//原题目
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 了呢?
我在我的环境上调试了一下过程,如下图所示
发现 a 居然是[0053]16 = [0000 0000 0101 0011]2,并非我所想的 0000 0001 0010 0011
经过一番研究后发现是C语言的进制问题,这里的 0123是 八进制
C语言的进制表示
在 计算机中,整数可以使用多种进制表示,包括 十进制、八进制、十六进制和 二进制。
以下是C语言为实例的每种进制的表示方法:
1. 十进制
- 默认情况下,整数是以十进制表示的。
- 不需要前缀,直接写数字即可
2. 八进制
- 八进制以
0
前缀开头。 - 八进制数字只能包含
0-7
,否则会引发错误
3. 十六进制
- 十六进制以
0x
或0X
前缀开头。 - 使用数字
0-9
和字母A-F
(不区分大小写)来表示
4. 二进制
0b
或0B
前缀来表示二进制数- 【注】较早版本的C语言 不直接支持二进制表示,通常需要用位运算或一些库函数来处理二进制数。
以下为代码实例
#include<stdio.h>int main() {int a = 123; // 十进制 123int b = 0123; // 八进制 0123,等于十进制 83int c = 0x1A3; // 十六进制 0x1A3,等于十进制 419int d = 0b1011; // 二进制 1011,等于十进制 11 printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);return 0;
}
进制表示总结
进制 | 表示方法 | 示例 |
---|---|---|
十进制 | 默认,无需前缀 | int a = 123; |
八进制 | 前缀 0 | int b = 0123; |
十六进制 | 前缀 0x 或 0X | int c = 0x1A3; |
二进制 | 0b 或 0B | int d = 0b1011; |