了解int变量如何在C中存储值

时间:2015-05-21 17:16:51

标签: c

考虑下面的C代码:

#include <stdio.h>
int main()
{
    int i = 012;
    printf("%d", i);
}

在O / P上,i的值打印为10.我知道(012) 8 =(10) 10 。但我对C如何存储int变量值感到困惑。任何人都可以向我解释一下吗?

4 个答案:

答案 0 :(得分:7)

它们以二进制形式存储,您可以使用许多表示来定义它们,但最后它是使用的二进制表示。

答案 1 :(得分:1)

硬件内存以bytes运行。因此,程序中最后的任何变量(int,char,指针或数组)都将转换为字节。如何&#34; C&#34;将再次这样做取决于硬件。请参阅EndiannessSize of int long type

假设您有32位小端计算机。任何&#39;&#39;在32位世界中,将存储为内存中的四个连续字节。这意味着在你的情况下,无论你使用什么字面意思,它是&#39; 012&#39;或者&#39; 10&#39;,它将像这样存储:

binary:  00001010 00000000 00000000 00000000
octal:         12        0        0        0
decimal:       10        0        0        0
hex:            A        0        0        0

连续四个字节的内存。

答案 2 :(得分:0)

所有值都使用二进制表示存储(对于整数,浮点数,字符等都是如此)。值int(十进制)存储为二进制数字序列i = 012; (假设为32位012类型)。

在像

这样的作业声明中
0

编译器知道如何将文字12中的八进制数字字符串转换为上面的二进制表示。前导00000000000000000000000000001100告诉编译器该值是八进制表示,否则它将尝试存储十进制值printfprintf("%d\n", i); )。

%d声明中

printf

转换说明符i告诉10显示存储在%x中的值,格式为十进制数字字符串(a)。同样,转换说明符<IfModule mod_rewrite.c> Options -Indexes RewriteEngine On RewriteBase / RewriteCond %{HTTP_COOKIE} !cfnw-hash [NC] RewriteRule ^resources/newspaper /error/401 [R=401,NC,L] # Force to exclude the trailing slash RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.*)/$ RewriteRule ^(.+)/$ $1 [R=307,L] # Allow any files or directories that exist to be displayed directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?$1 [QSA,L] </IfModule> 将显示格式为十六进制数字字符串({{1}})的值。

答案 3 :(得分:-3)

据我所知,它是C整数处理程序,它看到前导0,然后将其解释为基数8或八进制常量。

很抱歉只是为了重定向你,但我担心在这篇文章中我不能说比Abimaran Kugathasan更好:

Why int j = 012 giving output 10?

有关更深入的解释,请参阅bdonlan的答案: How does C Handle Integer Literals with Leading Zeros, and What About atoi?