『Cプログラミングの落とし穴』(A.コーニグ, 1990)
[M1 Mac, Big Sur 11.6.8, clang 13.0.0, NO IDE]
C言語では0で始まる整数は8進数として扱われます。0xで始まると16進数です。
int main()
{
int x = 010;
int y = 50;
int z = x + y;
printf("z = %d\n",z);
}
--------------------------------------------------
出力
--------------------------------------------------
z = 58
int main()
{
int x = 0x1F;
int y = 50;
int z = x + y;
printf("z = %d\n",z);
}
--------------------------------------------------
出力
--------------------------------------------------
z = 81
8進数というのは1byte= 8bitsでしか馴染みがないです。パーミッションでも8進数が使われている、という説明をしているサイトが多くありますが、10進数でも同じですから説明としては不十分だと思います。パーミッションは2進数であり上限は7である、というのが妥当ではないかと。
読み/書き/実行 = 可能/可能/不可 2進数 110 → 8進数 6、10進数 6
読み/書き/実行 = 可能/可能/可能 2進数 111 → 8進数 7、10進数 7