0

このプログラムを作成して、C の符号付きデータ型のいくつかのデータ型の最大値と最小値を計算しました。問題は、私のロジックは正しいと思いますが、正しい最大値と誤った最小値を示していることです。結果を得るためのより良い効率的な方法があることを知っており、それらも実装しました。指定されたコードがどこで間違っているかを知る必要があるだけです。

私がやった事?sizeof 演算子を使用してこれを実装し、型のビット数を計算し、それを使用して最大値と最小値を計算しました。

事前にサンクス.......

/*
* Program to calculate the size of various data types like :
* int, long, short, char
*
* Version 3
*
* Problem with this version : Working correct only for maximum value of a
* data type.
*
* Author : Ravi Malik
*/

#include<stdio.h>

int main()
{   int i, i_prev ;
    long l, l_prev ;
    char c, c_prev ;
    short s, s_prev ;

    for( i = 0, i_prev = -1 ; i > i_prev ; i = i << 1 | 0x01 )
        i_prev = i ;

    for( l = 0, l_prev = -1 ; l > l_prev ; l = l << 1 | 0x01 )
        l_prev = l ;

    for( c = 0, c_prev = -1 ; c > c_prev ; c = c << 1 | 0x01 )
    c_prev = c ;

    for( s = 0, s_prev = -1 ; s > s_prev ; s = s << 1 | 0x01 )
    s_prev = s ;

printf("MAX_INT:%d and MIN_INT:%d\n",i_prev,i);
printf("MAX_LONG:%ld and MIN_INT:%ld\n",l_prev,l);
printf("MAX_CHAR:%d and MIN_CHAR:%d\n",c_prev,c);
printf("MAX_SHORT:%hd and MIN_SHORT:%hd\n",s_prev,s);

return 0;
}
4

2 に答える 2

2

-1 は、すべてのビットが 1 に設定されていることを意味します。2 の補数では、最小値は 1 の後にゼロが続きます (符号付きデータ型のみ)。

あなたの場合、すべてのものが含まれているためi、 、lcまたはで -1 を取得しています。s

それらを 1 で初期化し、左シフト 1 のみを保持します (ビットごとの OR は使用しません)。

for( i = 1, i_prev = -1 ; i > i_prev ; i = i << 1)
    i_prev = i ;
于 2013-11-15T10:53:20.717 に答える