• ベストアンサー

情報科学

情報科学基礎実験で用いる計算機では、intは32ビットである。そのため使 用できる整数範囲はー2の31乗~2の31乗ー1である。そのため範囲を超えた整数は計算機内でマイナスがつくんですが、どうしてでしょうか? かなり急いでいるので誰か教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.5

以下の説明はお使いのコンピュータと同じ「負の数が2の補数表現」という前提です。 世の中には「負の数が1の補数表現」であるコンピュータが少なからず存在します。 単純化するために4ビットのintで説明します。 4ビット表現可能な2進数は 0000,0001,0010,0011,0100,0101,0110,0111, 1000,1001,1010,1011,1100,1101,1110,1111 の16種類です。 0000(二)は明らかに0(十)です。 よって、これをベースに考えます。 1111(二)+1(二)の計算結果は10000(二)となり、前提である「4ビット」の範囲を超えます。 最上位の1ビットがオーバーフローとなり0000(二)となります。 結果、1111(二)+1(二)=0000(二)となります。 0000(二)は0(十)です。 見方を変えると X+1(二)=0(十) ですから X=0(十)-1(二) です。 Xは明らかに-1(十)です。 よって、1111(二)=-1(十)という考え方ができます。 しかし、この考え方を16種の2進数すべてに当てはめると 1111(二)=-1(十) 1110(二)=-2(十) ... 0010(二)=-14(十) 0001(二)=-15(十) 0000(二)=-16(十) となってしまい「2進数を見ただけでは正負の判別ができない」という状況になります。 そこで『最上位のビットが1の時を負の数とする』というルールが付け加わりました。 0000(二)=0(十) 0001(二)=1(十) ... 0110(二)=6(十) 0111(二)=7(十) 1000(二)=-8(十) 1001(二)=-7(十) ... 1110(二)=-2(十) 1111(二)=-1(十) 7(十)+1(十)=-8(十)ということになります。

nakayamayosie
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

勘違いがあるようです。 >範囲を超えた整数は計算機内でマイナスがつくんですが、どうしてでしょう か? 範囲を超えればオーバフローですからマイナス以外の印を付けるべきですね。 でも表現の手段が無いのでマイナスで代用しているのかもしれません。 32ビットのINTの表し方です。 頭の1ビットは符号を表すのに使います。(0:正、1:負) 数字のゼロは正の側のゼロを使います。 それで -(2^31)~0~(2^31-1)です。全部足すと2^32個です。 負の数は当然2の補数を使います。

nakayamayosie
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • S-Fuji
  • ベストアンサー率36% (592/1624)
回答No.4

一部間違い >32ビットで表せる正数の場合 32ビットで表せる整数 >7FFFhを越えて 7FFFFFFFhを越えて 失礼しました。

nakayamayosie
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • S-Fuji
  • ベストアンサー率36% (592/1624)
回答No.2

 32ビットで表せる正数の場合、実際に数字の部分は、31ビットで表し、32ビット目を、負数を表すビットとして使います。  ですから、7FFFhを越えて、頭にビットが立ってしまうと、負数と判断してしまいます。

nakayamayosie
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

計算機では、先頭の1ビットをフラグとして用いてます。 つまり、このビットが 1ならば、マイナスとして扱うのです。 だから、32ビットで扱える数の半分以上は、 マイナスになるということです。

nakayamayosie
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 32bitと64bitのコンピューター

    身の回りには沢山のパソコンがあります。32ビットが多いと思いますが、64ビットのパソコンも5%くらいあるでしょうか。 さて、パソコンの中の何がbit数を決めているのでしょうか?CPU?OS?マザーボード? 4ビットのパソコンで7+3を計算すると、10にしたくてもマイナス6になるんでしたっけ(マイナス2の3乗足す2)?8ビットのパソコンで127+3を計算すると、130としたくてもマイナス126になるんでしたっけ(マイナス2の7乗足す2)? 任天堂64っていうゲーム機がありましたが、2の64乗個の整数を扱えるからこういう名前なんですか? bit数は計算可能な整数の範囲だと記憶しているのですが、これは何で決まりますか?128ビットのパソコンを作るのってハードル高い?8ビットや16ビットだと、ユーチューブの再生が遅くなったりする? 蓮舫さんが嫌いな京っていうスーパーコンピューターは何ビット?

  • 情報科学の科目・分野

    「情報科学」の分野、科目にはどのようなものがありますか? 調べてみたら、「計算機科学」「コンピュータサイエンス」「情報システム論」などは、内容が同じで呼び方だけが違うみたいです 「アルゴリズム」「情報理論」「計算理論」「ソフトウェア工学」 「人工知能」…といった科目があるようですが、情報科学全体の体系が よくわかりません ご存知の方、よろしくお願いします

  • 大阪大学 情報科学科 雰囲気

    こんにちわ。少し気になったんで質問します。 今受験生で大阪大学の基礎工学部情報科学科を目指しています。自分はパソコンに興味がありプログラミングなどを学びたいからです。 そこで大阪大学の情報科学科の雰囲気や授業の忙しさなど教えてほしいです。 ・やはり情報系なのでオタクっぽい人が多いのですか?(自分はそういう感じではないんで学科内での友達作りがうまくいくか不安で…) ・やはり実験などで忙しいのですか?一週間のだいたいの授業、実験時間を教えて下さい。 以上の②点を特に知りたいです。(他のことも知りたいです。)進路相談でなくただ大学の様子が知りたいだけなので些細なことでもいいんで回答お願いします。

  • 情報科学・工学についての大学の情報教えて下さい。

    こんにちは。 現在高3で受験戦争の真っ只中に居ります。 少し遅いですが、これからの為に志望大学を絞りたいので、助言を求めて投稿します。 恐らく学部は情報科学か情報工学で合っていると思うのですが…(こんな事から分かっていなくてすみません) 希望の大学・学部としては、 ・プログラミングを学べる。 ・基礎からしっかり教えてくれる。(企業が必要とするのは基本を学んだ人だと聞いたので。それにまだ詳しい方向が分からないのでどっちへでも転べるよう基礎をしっかりしておきたいです。) ・場所としては何処でも良いのですが、絶対に此処にするべきだという場合意外は東海内でお願いします。 国公立・私立両方の情報が知りたいです。 学部についての基礎知識から各大学の情報まで、どういうことでも良いので詳しく知っている方回答して頂けると凄く助かります。 情報が少なかったり見当違いな場合は補足・訂正するので指摘して下さい。 範囲が広くてすみません。回答お願いします。

  • 大阪大学 基礎工学部 情報科学科について

    大阪大学 基礎工学部 情報科学科について 僕は今高校2年で進路を今のところ第一志望をここに決めようと思っているのですが、 この学科のホームページをみても分からないところがありました。 もしかしたら、見落としているだけかもしれませんが・・ この情報科学科は1年次に、計算機科学コース、ソフトウェア科学コース、数理科学コースに分かれるのですが、僕はソフトウェア科学コースに行きたいと思っています。 しかし、このコースの分け方について人数制限は乗っているのですが、コースへの入り方が書いていないのです。 ここからが質問で、このコース選択は自分の好きなコースにいけるものですか? えーとつまり、コースの人数がオーバーしてしまった場合、一部の人は違うコースに行かなければならない、みたいな状況はあったりするのですか? 自分の行きたくないコースに行くのは嫌なので質問させていただきました。 知っている方よろしくお願いします。

  • 100ビットの整数型

    0 から 2^100-1 までの整数について、とある計算をする必要があるのですが、java の int だと 32ビットしかないのであふれてしまいます。 100ビットの整数型というのは自作するしかないでしょうか?

    • ベストアンサー
    • Java
  • javaのbyte型の整数範囲の考え方

    javaのbyte型に格納できる10進数の整数範囲の考え方についてです。 コンピュータ内部で-128がどのように表現されているのかが よく分からないので質問させてください。 byte型(8bit)は-128~127の整数範囲、とあります。 □□□□□□□□(8bit)あって 00000000~01111111が(整数0~+127)を表現。 1番左のビットは符号を表すためのビット(+なら0 -なら1) でよろしいのでしょうか? となると-1は マイナス→10000001(1番左のビットは1でマイナスを表す)でいいのでしょうか? もしこれだと、-128の場合そもそもビットが8個しかないので 11111111だと一番左のビットが1でマイナスを表すとして 残りの7ビット1111111で127を表現しているような気がして、 11111111(8bit)は-127では?と思うんです。 こういうのが詳しく書いてあるサイトなどはないでしょうか? ここでご指導頂ければありがたいです。

  • コンピュータ科学基礎の部分だけ勉強したい

    国税専門官試験の情報数学と情報工学の受験をするので、 基本情報技術者試験の範囲である「コンピュータ科学基礎」 の部分のみを勉強しなければならなくなりました。 知識ゼロでも「コンピュータ科学基礎」の部分がわかるように解説された 参考書はないでしょうか?

  • C言語 関数

    int型整数値の四乗値を返す関数int power4(int x)を作りたいのですが… int i; puts("整数を入力してください:") for (i = 0; i < 10; i++) {         printf("%d\n",i*i*i*i); } このようにすれば多分四乗になるとおもうのですが、 この場合、範囲がi<10のように指定されてしまいます。 どのようにすれば範囲に関係なく四乗の値が求められるのでしょうか? C言語初心者で、まだ基本的なものしか勉強していないのですが、 どなたかアドバイスよろしくお願いします。 (作り方は二通りあって、factorialを使う方法と上のように単純に4回かける方法があるようです)

  • 計算機について

    10の80乗の計算は8ビット16ビット計算機で計算でどのようにしてできますか??