解答例14-1

【問1】

#include <stdio.h>
#include <limits.h>

int main( void )
{
        unsigned int x, y, z;

        printf( "0〜%uの整数を2つ入力\n", UINT_MAX );
        scanf( "%u%u", &x, &y );

        z = x & y;
        printf( "%u(%#x) AND %u(%#x) = %#x\n", x, x, y, y, z );

        z = x | y;
        printf( "%u(%#x) OR  %u(%#x) = %#x\n", x, x, y, y, z );

        z = x ^ y;
        printf( "%u(%#x) XOR %u(%#x) = %#x\n", x, x, y, y, z );

        return 0;
}

※ %u は、unsigned型に対する書式指定文字列です。
  UINT_MAX は limits.h の中でマクロ定義され、unsigned int型の最大値を表します。

【問2】

#include <stdio.h>
#include <limits.h>

void bit_disp( unsigned int dt );

int main( void )
{
        unsigned int a;

        printf( "0〜%uの整数を入力(終了条件:Ctrl+Z)\n", UINT_MAX );
        while( scanf( "%u", &a ) != EOF ){
                bit_disp( a );
        }
        
        return 0;
}

/*** ビット表示関数 ***/
void bit_disp( unsigned int dt )
{
        int i, len;

        /* unsigned int のビット数をlenにセット (注)*/
        len = sizeof(dt) * CHAR_BIT;
        
        printf( "%#x ---> ", dt );
        for ( i = len - 1; i >= 0; i-- ){
                /* ビットの表示 */
                printf( "%u", ( dt >> i ) & 0x0001 );
        }
        printf( "\n" );
}

(注) CHAR_BIT は limits.h の中でマクロ定義され、1バイトのビット数を表します。
   ただし、この len の求め方は特殊な処理系では正常に取得できません。
   詳しくはhttp://www.bohyoh.com/CandCPP/FAQ/FAQ00018.htmlをご覧ください。

戻る


banner初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved