WGC1 第2章数値表現 2.8飽和


大きいほうの値が小さいオブジェクトの範囲外である場合は、小さいほうの
データ型の範囲内で最大の(または最小の)値にセットするという方法で、大きい値を
切り詰めます。

実験コード
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>

void print(char *info, unsigned short us, short s){
    printf("------%s------\n",info);
    printf("us(hd) = %hd\n", us);
    printf(" s(hd) = %hd\n",  s);
    printf("us(d) = %d\n",   us);
    printf(" s(d) = %d\n",    s);
    printf("------------\n");
    return;
}

int main(int argc, char *argv[]){
    unsigned short us = 0;
             short  s = 0;
    unsigned int   ui = 0;
             int    i = 0;
    
    us =  (unsigned short)65535;
    s = (short)32767;
    print("USHORT MAX,SHORT MAX", us,s);

    us =  (unsigned short)65546;
    s = (short)32778;
    print("USHORT MAX + 10,SHORT MAX + 10", us,s);
    
    us =  (unsigned short)UINT_MAX;
    s = (short)INT_MAX;
    print("UINT MAX, INT MAX", us,s);

    ui = 65535;
    i = 32767;
    us =  (unsigned short)ui;
    s = (short)i;
    print("USHORT MAX,SHORT MAX,CAST", us,s);

    ui = 65546;
    i = 32775;
    us =  (unsigned short)ui;
    s = (short)i;
    print("USHORT MAX + 10,SHORT MAX + 10,CAST", us,s);
    
    ui = UINT_MAX;
    i = INT_MAX;
    us =  (unsigned short)ui;
    s = (short)i;
    print("UINT MAX, INT MAX, CAST", us,s);

    
    return 0;    

}
環境
結果
------USHORT MAX,SHORT MAX------
us(hd) = -1
 s(hd) = 32767
us(d) = 65535
 s(d) = 32767
------------
------USHORT MAX + 10,SHORT MAX + 10------
us(hd) = 10
 s(hd) = -32758
us(d) = 10
 s(d) = -32758
------------
------UINT MAX, INT MAX------
us(hd) = -1
 s(hd) = -1
us(d) = 65535
 s(d) = -1
------------
------USHORT MAX,SHORT MAX,CAST------
us(hd) = -1
 s(hd) = 32767
us(d) = 65535
 s(d) = 32767
------------
------USHORT MAX + 10,SHORT MAX + 10,CAST------
us(hd) = 10
 s(hd) = -32761
us(d) = 10
 s(d) = -32761
------------
------UINT MAX, INT MAX, CAST------
us(hd) = -1
 s(hd) = -1
us(d) = 65535
 s(d) = -1
------------

うーむ飽和にはならないな
なにか勘違いしてる??
MMX拡張命令が使われてるかどうかってどうやって確認するんだろ。。。









Randall Hyde、鵜飼 文敏、まつもと ゆきひろ、後藤 正徳、トップスタジオ