c - 为什么编译器在执行时将 0100 整数位作为 c 中的 64?
问题描述
该程序基本上用于计算整数的位数。但是,当我给出不以零开头的输入数字('100')时,它可以正常工作,但是如果我以零开头('00100')给出输入,那么它会给出错误的输出。
例子:
1)输入:100
输出:3 .预期输出。
2)输入:00100
输出:2 .意外输出。
因为它需要' 00100 '整数作为整数' 64 '我不知道为什么?
#include <stdio.h>
#include <stdlib.h>
int Digit_count(int);
int main(void)
{
int a;
a = Digit_count(00100);
printf("\nNumber of Digits = %d\n",a);
return 0;
}
/// function for count number of digits
int Digit_count(int a)
{
int p,digit;
p=a,digit=0;
printf("\n%d\n",p); // **This line code prints Output: 64**
while(p!=0)
{
p = p/10;
digit++;
}
return digit;
}
解决方案
在 C 编程语言中,定义了几种不同的数值系统供程序员使用。
十进制数是我们习惯的标准以 10 为底的数字,它们是您希望程序使用的,但在第 62 页的 C11 标准中,它们定义以 0 开头的整数常量作为八进制常量,这意味着以 8 为基数。
因此,当您将 100 传递给程序时,它会将其解释为十进制 100,与八进制 144 相同,而当您键入 0100 时,它会将其解释为八进制 100,与十进制 64 相同。
我希望这会有所帮助!
推荐阅读
- hyperledger-fabric - 在多主机环境 orderer1-org0 中启动排序服务时 | 恐慌:运行时错误:索引超出范围 [1],长度为 1
- django - ModuleNotFoundError:没有名为“上下文”的模块
- javascript - 尽管 node-gyp 重建说 OK,iconv.node 模块错误
- regex - 如何为共享相同根的项目列表编写正则表达式
- python - Pandas:根据其他列的值创建一个新列(按行)
- autodesk-forge - 将 Autodesk Forge Viewer 设置为 Infinity Pool 环境
- ios - 无法使用 WebRTC 渲染远程视频
- batch-file - Jenkins 作业因命令中的 for 循环而失败
- ios - 引用 CocoaPod 框架内的包失败
- mpi - openmpi -host 是如何工作的