教えてください4
初心者なのでわかりやすくお願いします。
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です。
よりシンプルにしてみました。
#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;
}
可能な限り分かりやすくなるようにがんばりました。
#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;
}
- 最新から表示
- |
- 回答順に表示













