値の性質
FIXEDVAL値は単純な固定小数点値です。数値幅が長い、という事以外は char型 や int型等の標準的な整数型と同じです。
n bit の FIXEDVAL値

配列要素の順序はリトル・エンディアンです。
ビットの重みは、LSB から順に 1(20)、21 、22 、23 ・・・ 2n-1 となります。
最大値・最小値は、数値幅や数値の扱いによって異なります。
例えば、128bit の数値幅、符号付き(signed)で表現されている場合、
正の範囲: 0 〜 170,141,183,460,469,231,731,687,303,715,884,105,727
(0 〜 0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF)
負の範囲: -1 〜 -170,141,183,460,469,231,731,687,303,715,884,105,728
(0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 〜 0x80000000 00000000 00000000 00000000)
符号無し(unsigned)で表現されている場合は、
0 〜 340,282,366,920,938,463,463,374,607,431,768,211,455
(0 〜 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF)
となります。
signed の場合、値は 2 の補数で表現されますので、他の固定小数点値と同じく、MSB を符号ビットとして見る事ができます。
FIXEDVAL値の先頭アドレスを val 、数値幅を width とした場合、
if (val [width - 1] & 0x80){
負の場合の処理
}else{
正またはゼロの場合の処理
}
マクロを利用すると、プログラムを見易くする事ができます。
#define BIT 128 /* ビット幅最大 */
#define SIZE (BIT / 8) /* バイト幅最大 */
#define ISNEG(X) (((PFIXEDVAL )(X))[SIZE-1] & 0x80)
・
・
・
if (ISNEG(val)){ /* val が負の場合 */
・
・
・
}