[C言語] Cパズルブック 2.2.1 整数と浮動小数点数の型変換 除算演算子 “/”

『Cパズルブック』(Alan R.Feuer, 1985)
[Mac M2 Pro 12CPU, macOS Ventura 13.3.1, clang 14.0.3]

問2.2.1のコードと出力は以下の通りです。

整数同士の割り算では計算結果が整数(商)になる、というルールについてC++20規格での記載箇所をアップしておきます。たまに扱う度に引っかかるところなので規格上の根拠を確認しておきました。

要は(a/b)*b + a%b=aになるよう言語が設計されているということを意味します。商と剰余で元の整数を算出できます。

#include "stdio.h"

#define PR(x) printf("x = %.8g\t", (double)x)
#define NL putchar('\n')
#define PRINT4(x1, x2, x3, x4) PR(x1); PR(x2); PR(x3); PR(x4); NL

int main() {
    double d;
    int d2;
    float f;
    long l;
    int i;

    d = 100/3;
    d2 = 100%3;
    printf("d = %.8g\n",d);
    printf("d2 = %d\n",d2);

    int a;
    int b;
    double c;
    a = 100;
    b = 3;
    c = (a/b)*b + a%b;
    printf("c = %.8g\n",c);

    i = l = f = d = 100/3;
    // (i = (l = (f = (d = (100/3)))))
    // (i = (l = (f = (d = 33))))
    // (i = (l = (f = (double)33))) and d=33
    // (i = (l = (float)33)) and f=33
    // (i = (long)33) and l=33
    // ((integer)33) and i=33
    PRINT4(i, l, f, d);

    return 0;
}
d = 33
d2 = 1
c = 100
x = 33	x = 33	x = 33	x = 33	
除算に関する記述(C++20規格)