自学内容网 自学内容网

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

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

题目介绍

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

image-20241108131949102

//原题目
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

过程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语言 不直接支持二进制表示,通常需要用位运算或一些库函数来处理二进制数。

以下为代码实例

#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语言测试

进制表示总结

进制表示方法示例
十进制默认,无需前缀int a = 123;
八进制前缀 0int b = 0123;
十六进制前缀 0x0Xint c = 0x1A3;
二进制0b0Bint d = 0b1011;

原文地址:https://blog.csdn.net/m0_64353660/article/details/143624718

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!