掲示板ランキング  上下セット・セットアップ  ドレス・スーツ(女の子)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.6808

シフトによる回転について
投稿者---tadano(2006/11/28 00:47:46)


#include<iostream>

using namespace std;


unsigned rrotate(unsigned x ,int n);

unsigned lrotate(unsigned x,int n);


int main()
{
  unsigned iNumber;
  
  int iSitei;
  
  cout << "符号なし整数を入力してください";
  cin  >> iNumber;
  
  cout << "何ビット目をどれだけずらしますか?";
  cin  >> iSitei;
  
  
  cout << iNumber << "の" << iSitei << "ビット右に回転させたら\n";
  rrotate( iNumber,iSitei );
  
  cout << iNumber << "の" << iSitei << "ビット左に回転させたら\n";
  lrotate( iNumber,iSitei );
  
  return 0;
}

unsigned rrotate(unsigned x ,int n)
{
  for(int i=0; i<n; i++)
  {
    cout << (( x >> i) &1U) ? '1':'0';
  }
  for(int i=15; i>=0+n; i--)
  {
    cout <<  (( x >> i) &1U) ? '1': '0';
  }
  cout << '\n';
}

unsigned lrotate(unsigned x,int n)
{
  for(int i=15-n; i>=0-n; i--)
  {
    cout <<  (( x << i) &1U) ? '1': '0';
  }
  cout << '\n';
}




このプログラムで整数をnビットシフトさせて、あふれた部分を反対側から、あたかもつながっているように表示させたいのですが、これ以上先に進めません。シフトだけして表示ならできるのですが。方法ありますか?
WindowsXP,BorlandC++です。宜しくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:シフトによる回転について 6809 かずま 2006/11/28 01:58:48


No.6809

Re:シフトによる回転について
投稿者---かずま(2006/11/28 01:58:48)


#include <iostream>

const int NBITS = 16;

void print(unsigned x)
{
    using namespace std;
    for (int i = NBITS; i--; ) cout << (x >> i & 1);
    cout << endl;
}

void rrotate(unsigned x, unsigned n)
{
    n %= NBITS;
    print((x >> n | x << (NBITS - n)) & ((1 << NBITS) - 1));
}

void lrotate(unsigned x, unsigned n)
{
    n %= NBITS;
    print((x << n | x >> (NBITS - n)) & ((1 << NBITS) - 1));
}

int main()
{
    using namespace std;
    unsigned x, n;
    cout << "符号なし整数を入力してください ";   cin >> x;
    cout << "何ビットずらしますか? ";           cin >> n;
    cout << x << " を " << n << " ビット右に回転させたら "; rrotate(x, n);
    cout << x << " を " << n << " ビット左に回転させたら "; lrotate(x, n);
}

NBITS が 32 の場合、ちょっと問題のあるプログラムです。


この投稿にコメントする

削除パスワード

No.6837

Re:シフトによる回転について
投稿者---tadano(2006/11/30 01:12:23)


ようやく理解できました。ありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ