新しく質問する

教えてください4

役に立った:2件
  • 質問者:kansai223
  • 投稿日時:2009/06/14 15:51
  • 困り度:すぐに回答が欲しいです

初心者なのでわかりやすくお願いします。
16ビットの場合の2の補数を求めるプログラムをポインタを使用して
作成せよ。

2の補数→簡単に言うと2進数表記の各ビットを反転して1を足した値

(例)36の2の補数、8ビットの場合
1.36(10進数)→00100100(2進数表記)
2.各ビット反転→11011011
3.下位1ビットに1を足す→11011100(36の2の補数)


<実行結果>
10進数を入力:12

2の補数へ変換
0000000000001100 -> 1111111111110100

2の補数は1111111111110100です。

この質問に回答する
このQ&Aは役に立ちましたか?(役に立った:2件)

回答(2件)

  • 参考になった:0件
  • 回答者:Quant
  • 回答日時:2009/06/15 23:25

よりシンプルにしてみました。

#include <iostream>
#include <bitset>
using namespace std;
int main()
{
int i;
cout << "10進数を入力:";
cin >> i;
cout << i << "(10進数)\t\t->" << (bitset<16>)i << "(2進数表記)" << endl;
cout << "2の補数へ変換" << endl;
i = ~i;
cout << "各ビット反転\t\t->" << (bitset<16>)i << endl;
i++;
cout << "下位1ビットに1を足す\t->" << (bitset<16>)i
<< "(" << ~i+1 << "の2の補数)" << endl;
}

通報する

  • 参考になった:0件
  • 回答者:jacta
  • 回答日時:2009/06/15 01:21

可能な限り分かりやすくなるようにがんばりました。

#include <iostream>
#include <bitset>

int main()
{
 std::cout << "10進数を入力:" << std::flush;
 unsigned long value;
 std::cin >> value;

 std::bitset<16> bs(value);
 std::cout << "\n2の補数へ変換\n";
 std::cout << bs.to_string<char, std::char_traits<char>, std::allocator<char> >() << " -> ";

 bs = -bs.to_ulong();
 std::cout << bs.to_string<char, std::char_traits<char>, std::allocator<char> >() << std::endl;
}

通報する

  
このQ&Aは役に立ちましたか?(役に立った:2件)

このページのトップへ