• 締切済み

2の補数を計算するプログラム

2の補数を計算するプログラムを組まなければならないのですが、プログラミングをしばらく行っていなかったのでサッパリわかりません。 void main(){ int a[8] = {0, 1, 0, 1, 0, 1, 0, 1}; int b[8]; twos_complement(a, b); print_bin("a", a); print_bin("b", b); } 上記のヒントを貰ってもう1つ別に変数を作ってそこで処理させるというのは分かるのですが正直言ってちんぷんかんぷんです。 助けてください。

みんなの回答

回答No.3

排他的論理和を使うと簡単です #include <stdio.h> int main() { int a, b = 36; a = b ^ 0xffffffff; // 排他的論理和 a = a + 1; // bの2の補数 printf("a = %d \n",a); }

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★次のリンクをどうぞ。 ・http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0→『2の補数』 ・http://www.geocities.jp/debu0510/basic/main24.html→『2の補数』 ・http://tfusvsun.tfu.ac.jp/mko/CASL2/vol1/text/1-16.html→『1-16 2進数と16進数(7)』 ・上記の3つを参考にすれば、プログラムで組めるでしょう。  頑張って下さい。以上。

noname#39970
noname#39970
回答No.1

人間の頭でどういう手順で変換するか書き出せる? 手順を箇条書きにできれば プログラム化してるのと殆ど一緒だとおもうんだけど?

関連するQ&A

  • プログラミングのことで教えていただきたいのですが・・・

    以下のプログラムを使用して、8桁の2進数の2の補数を計算するプログラムを作成しなさい。 という問題です。 配列aを変更するとどう変わるか添えて提出しなければならないのですがどうしても分かりません。 void main(){ int a[8]={0,1,0,1,0,1,0,1}; int b[8]; twos_complement(a, b);//補数の計算 print_bin(“a=”,a);/*配列の表示*/ print_bin(“b=”,b); } 実行結果: a=01010101 b=10101011 どなたかご教授お願いします。

  • 2の補数について

    情報処理試験(基本情報)用の考え方という前提でお聞きします。 「負数を2の補数形式で表現する2進数の計算で・・・・」という問題がよくあります。 この問題文の中で「10101」などの数(これは5ビットの符号付2進数とします) として記述されているものは、もう2の補数になっていると考えていいのでしょうか? それともこれを、今から2の補数に直すのですか? (もし直すのであれば、最上位ビットの符号が変わるのでしょうか?) 違う言い方をしてみますと「A」の2の補数が「-A」だとしたら、 「-A」の2の補数は「A」になるんでしょうか? それとも「そんな表現はない。-Aの時点ですでに2の補数だ」という ことになるのでしょうか? 解りにくくてすみません。

  • この2つのプログラムは全く同じものでしょうか?

    class Base{ protected int x; Base() { this.x=0;} Base(int x) {this.x=x;} void print(){ System.out.println("Base.x="+x);} } class Derived extends Base{ int x; Derived(int x1,int x2){ super(x1); this.x=x2;} void print(){ super.print(); System.out.println("Derived.x="+x);} } public class SuperTester{ public static void main(String[] args){ Base a =new Base(10); System.out.println("----a----"); a.print(); Derived b=new Derived(20,30); System.out.println("----b----"); b.print(); } } このプログラムと、 このプログラムのDerivedクラスのコンストラクタの部分を Derived(int x1,int x2){ super.x=x1; this.x=x2;} に変えたプログラムです。 かなりややこしいのですが、この2つのプログラムはソースは一部違いますが、 意味するものは全く同じでしょうか? ちなみにこの2つは実行結果は同じになります。 【実行結果】 ----a---- Base.x=10 ----b---- Base.x=20 Derived.x=30 つまり、Derivedクラスでint x;を書かず、 よろしくお願いします。

    • ベストアンサー
    • Java
  • スタックを用いて整数配列を入れ替えるプログラムがわかりません…!

    C言語プログラミングの超初心者です。 「スタックを用いて0~9の10個の整数配列を5個ずつ並び替えるプログラムをつくる」(0123456789→4321098765) という課題に取り組んでいるのですが、 お恥ずかしいのですがスタック・プッシュ・ポップの関係を何とか理解した程度で、どのようにプログラミングを組めばよいのかわかりません…! 上記の課題の前提として、「0~100までの整数の並び順を逆にする」(0 1 2…100→100 99 98…0)が与えられていました。途中で分からなくなってしまっため、恥ずかしながら途中までなのですが、記述させていただきます。こちらのプログラムが参考になるようであれば、使っていただければ幸いです。 #include<stdio.h> #include<stlib.h> #define STACKLENGTH 100 #define LENGTH 10 int stack[STACKLENGTH]; int stack_p = 0; void print(void); void Print(char*,int*a,int); int main(int arg,char** argv){ int a[LENGTH]; int ii; for (ii=0; ii<LENGTH, ii++){ a[ii]= rand()%101; } Print("入れ替え前",a,LENGTH); for(ii=0; ii<LENGTH; ii++){ push(a[ii]); } for (ii=0; ii){ a[ii]=Pop(); } Print("入れ替え後",a,LENGTH ); } お手数をおかけします。とても困っており、ぜひご指導をお願いいたします…!

  • 2の補数計算のプログラムでエラー

    いまMicrosoft Visual C++ 2010 Expressで2の補数計算のプログラムを作成していて、 コマンドボタンを押したら、次のプログラムを実行使用しているのですが(まだ途中ですが・・・) char cOrg[128] = ":100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF", *p; int iVal1,iVal2,iTotal = 0,iHosu; p = cOrg + 1; //":"は無視 while(*p) { *p = toupper( *p ); iVal1 = -9; if(('A' <= *p)&&('F' >= *p)) { iVal1 = *p - 'A' + 10; iVal1 *= 16;    } } ビルドしようとすると、この部分のプログラムでエラーがでます。 if(('A' <= *p)&&('F' >= *p)) { iVal1 = *p - 'A' + 10; iVal1 *= 16; } (エラー内容) \Form1.h(332): error C3872: '0x3000': この文字を識別子で使用することはできません これはどのような意味のエラーなのでしょうか? どのように修正すれば良いでしょうか?

  • mainの外に変数 vs ポインタ渡し

    C++についての質問です。プログラミング初心者ですが、よろしくお願いします。 最近、関数の外側でも変数を宣言できることを知りました。関数の外側で変数を宣言すると、全ての関数でその変数にアクセスすることができ大変便利なように思います。 「わざわざポインタ渡しなどする必要はないのでは?」と思ってしまいました。 これは何か問題があるのでしょうか? 初心者の言葉で説明しても理解しにくいかと思いますので、例として「足し算するプログラム」を以下に記載します。 ポインタ渡しで書くと、以下のような感じになるかと思います。 //●ポインタ渡し #include "stdafx.h" #include <iostream> void func(int x,int y,int *pans){ *pans = x+y; } void main(){ int a=10, b=20, ans; func(a,b,&ans); std::cout << ans << std::endl; } しかし、mainの外に変数を宣言すれば //●mainの外に変数 #include "stdafx.h" #include <iostream> int a,b,ans; void func(int x,int y){ ans = x+y; } void main(){ a=10; b=20; func(a,b); std::cout << ans << std::endl; } ansをポインタ渡しする必要なく、funcの計算結果をansに代入できました。 「●mainの外に変数」のプログラムはどのような問題や危険性を孕んでいるのでしょうか? 以上になります。長文お読みいただきありがとうございました。 よろしくお願いいたします。

  • staticで初期化した変数(?)を使って初期化

    次の3つのプログラム、1番目はコンパイルエラーになりますが、下2つはエラーになりません。1番目のプログラムのエラーメッセージ:初期化子が定数ではありません。 処理系にかかわらずそうだとしたら、その理由はなんでしょうか。 ---------------------------------- int main(void) { static int a=5; static int b=a; return 0; } ---------------------------------- int main(void) { static int a=5; int b=a; return 0; } ---------------------------------- int main(void) { int a=5; int b=a; return 0; }

  • コマンドラインのオプションの読み取り

    C++で、引数に/オプションで処理ごとに実行するプログラムを書きたいのですが、具体的にmain関数でどう書けばよいのでしょうか? スマートの方法が知りたいです。 sample.exe /test=1 aの関数を実行 sample.exe /test=2 bの関数を実行 sample.exe /test=3 cの関数を実行 int main(int argc, char**argv) { ... ここの処理? } void a(){ print "A\n"; } void b(){ print "B\n"; } void c(){ print "C\n"; }

  • プログラムの組み方が分かりません。

    ある課題で以下の問題が出題されました。 >>>> 2つのint型変数x,yにキーボードから値を入力し、その大小を判定する関数funcを作成せよ。この課題では、大きいと判定された数が代入された変数のアドレスがmain関数に戻されるものとする。 ============ #include<stdio.h> int *func(int *a,int *b) { /* 2つの値の大小判定を行い、アドレスを返す */ } main(void) { int x, y, *z; /* 変数 x,yにキーボードからデータを入力する */ /* 関数funcの呼び出し */ /* 変数zを用いて値の出力を行う */ } ============ <<<< 2行目の*funcというように、関数の頭に*が付くプログラムは初めてで、 どういう意味かもさっぱりわかりません。 それも含め、この問題はどういう風解けばいいのか、教えてください。 お願いします。

  • PIC のプログラムについて どうすれば終了できますか?

    PICのプログラムは実行させると、永遠にmain関数がループするようになっていると思うのですが、それを抜け出すにはどのようにしたらいいでしょうか? 例えば #include <pic.h> void main(void) { int a,b; a=1; if(a == 1) ????????//main脱出したい } ?の部分をどのように書けば脱出できますか?

専門家に質問してみよう