2013年7月8日月曜日

開発環境

プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第2章(データ型・演算子・式)2.9(ビットごとの論理演算子)の演習2-8を解いてみる。

その他参考書籍

演習 2-8.

コード

sample.c

#include <stdio.h>

unsigned rightrot(unsigned, int);
int wordlength();

int main()
{
    /* 00001111 */
    int x = 0x0f;
    /* 01111000000000000000000000000000 0x78000000 */
    int n = rightrot(x, 5);
    /* 00111100000000000000000000000000 0x3c000000 */
    int m = rightrot(x, 6);
    printf("%x %x %x %d\n", x, n, m, wordlength());
    return 0;
}

unsigned rightrot(unsigned x, int n)
{
    int bit;
    int len = wordlength();
    for ( ; n > 0; n--) {
        bit = (x & 1) << (len - 1);
        x = x >> 1;
        x = x | bit;
    }
    return x;
}

int wordlength()
{
    int i;
    unsigned x = (unsigned) ~0;
    for(i = 1; (x = x >> 1) > 0; i++);
    return i;
}

入出力結果(Terminal)

$ ./a.out
f 78000000 3c000000 32
$

0 コメント:

コメントを投稿