[C/C++] Cプログラミングの落とし穴 1.4 整数定数 P9

『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