C语言的进制表示【八进制,十六进制】
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; // 十进制 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;
}
进制表示总结
进制 | 表示方法 | 示例 |
---|---|---|
十进制 | 默认,无需前缀 | int a = 123; |
八进制 | 前缀 0 | int b = 0123; |
十六进制 | 前缀 0x 或 0X | int c = 0x1A3; |
二进制 | 0b 或 0B | int d = 0b1011; |
原文地址:https://blog.csdn.net/m0_64353660/article/details/143624718
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!