- PR -

「+1」だけで四則演算をするには? に関して

1
投稿者投稿内容
はじくn
会議室デビュー日: 2007/04/18
投稿数: 5
投稿日時: 2007-09-21 09:12
単純ですが、なかなか面白い記事でした。

ただくだらない事なんですけど、ソースには
引用:
while(b!=0){
ans++;
b--;
}


ってありますがこれって-1の演算になってませんか・・・?
for(int i=0;i++;i<b){
ans++
}
の方がよくないですかね。

単純に僕の理解力不足で--も++も「+1」を元にしてるのかもしれないんですけど、
周りに相談できる人がいないのでここで聞いてみました。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-09-21 09:22
引用:

はじくnさんの書き込み (2007-09-21 09:12) より:
単純に僕の理解力不足で--も++も「+1」を元にしてるのかもしれないんですけど、
周りに相談できる人がいないのでここで聞いてみました。


-1とは1の補数を足す行為なので、まぁ足し算といえば足し算ですね。
ただこのような課題の答えとするなら、補数を求めるところから記述してほしいですね。たとえばこんな感じ・・・

b = b + (!1 + 1)
はじくn
会議室デビュー日: 2007/04/18
投稿数: 5
投稿日時: 2007-09-21 13:29
甕星さん

返答ありがとうございます。
「1の補数」というのが初耳でして、調べてみたのですがいまいちよく分かりませんでした。
引用:
-1とは1の補数を足す行為なので、まぁ足し算といえば足し算ですね。


の「1の補数」というのは、「1をビット反転(論理否定)させたもの = -1」で、
「1の補数を足す」とは「-1を足す」という事でしょうか?

引用:
b = b + (!1 + 1)


また、この式はどういう意味でしょうか。
補数を理解していればわかるのかもしれないのですが、正直全然補数が理解できません・・・
上記の式から何を求めて、課題である「+1だけで四則演算」のどのようなところに説明として生かせるのか教えていただけないでしょうか。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-09-21 14:33
引用:

はじくnさんの書き込み (2007-09-21 13:29) より:
「1の補数」というのは、「1をビット反転(論理否定)させたもの = -1」で、
「1の補数を足す」とは「-1を足す」という事でしょうか?


「1の補数」というのは「1をビット反転(論理否定)させた後、1を加えたもの」です。

補数(-1なら0xFFFFFFFF)を加算するとオーバーフローを起こします。オーバーフローを起こした結果得られる答えは、減算した値と同じになるのです。-1を0xFFFFFFFFと表現するのは減算に加算回路を利用することでトランジスタ数を減らす先人の知恵です。このあたりの話は計算機科学の基礎なので、一度教科書を紐解いて、順序だてて学習することをお勧めします。
1

スキルアップ/キャリアアップ(JOB@IT)