C函数printf似乎打印不同的值,具体取决于是否存在前导零。
我试图确定Linux'open'系统调用中mode参数的数值。
printf("mode:%d\n",00700);
printf("mode:%d\n",700);
两人都给了我448,而
{{1}}给了我700,正如我所期望的那样。
这里发生了什么?
我正在使用gcc(Ubuntu 5.4.0-6ubuntu1~16.04.5)5.4.0 20160609
答案 0 :(得分:3)
具有一个或多个前导零的数值常量是八进制常数,而没有前导零的数字常量是十进制常量,一个带有前导{{1} }是十六进制常量。这适用于任何上下文,无论值是传递给0x
还是任何其他函数。
在printf
的情况下,您使用printf
格式说明符来打印十进制值。如果传入八进制常量,则会看到该八进制数的十进制值。在这个例子中,0700b8 == 7 * 8 ^ 2 + 0 * 8 ^ 1 + 0 * 8 ^ 0 == 7 * 64 == 448b10
如果您正在处理文件权限,那么这些值通常表示为八进制,因此您应始终使用前导0和那些值。