• ベストアンサー

2進数について

2進数について質問です。 Windows付属の電卓(プログラマモード)で Byteを選択して1000 0000を入力した後にWordを選択すると 1111 1111 1000 0000と表示されます。 Byte→Wordを選択することで1バイトの表現から2バイトの表現に 拡張されたことで1で埋められるという現象が不思議に思えて仕方ありません。 ちなみに拡張される前の数値の先頭が1である場合にこの現象が起きます。 これはどういうことでしょうか。この1で埋められる理由又は仕組みを教えて 頂けませんでしょうか。

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8014/17129)
回答No.3

10進の-128は,2の補数表現で表すと1000 0000となります。 これを符号拡張しないで16ビットの領域に格納した場合は 0000 0000 1000 0000 となって,これを整数として解釈すると128になってしまいます。値が変わらないように符号拡張すれば 1111 1111 1000 0000 となって-128と解釈できます。 https://ja.wikipedia.org/wiki/符号拡張 https://ja.wikipedia.org/wiki/2の補数 を参考にしてください。

unko347
質問者

補足

御回答ありがとうございます。 教えて頂いた2の補数と符号拡張を実際に試してみて 1111 1111 1000 0000という結果を得ることができました。

その他の回答 (3)

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.4

10進数で説明しますね。 ここで10進数は4桁までしかありません。 ということは0から9999まで表せます。 9999に4を足しましょう。10003ですね。 4桁を超えてしまいました。 頭の1は入れられませんから3になります。 4をたして3になったのだからー1と同じですよね。 これを2進数で考えたものが2の補数と言います。 10進数で9が並ぶように2進数では1が並ぶということですね。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

最上位ビットは、符号(プラス、マイナス)を表します。 0がプラス、1がマイナスです。 8bitの1000 0000 は、-128を表します。 16bitで、-128は、1111 1111 1000 0000 なので、そうなります。 >ちなみに拡張される前の数値の先頭が1である場合にこの現象が起きます。 というのはその通りです。

unko347
質問者

補足

御回答ありがとうございます。2の補数で調べてみました。 ご指摘のように-128は8bitで1000 0000で表されこれを 16bitの枠に入れると0000 0000 1000 0000となり反転して+1すると 1111 1111 1000 0000となりました。 マイナス値を0と1で表現する操作を行うことで得られる結果であると わかりました。ありがとうございました。

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.1

「2の補数」で調べて見てください。

関連するQ&A

  • UTF8コードで1バイトの文字が2バイトで表現されているのですが・・・・?

    UTF8コードで1バイトの文字が2バイトで表現されているのですが・・・・? とタイトルの通りデータに    UTF-8のデータを扱っていて  16進表記で『0xC341』と  データが入ってきました。 0xC3…11000011  0x41…01000001 UTF-8の仕様で2バイト目の文字は先頭ビットが 10 から始まる仕様となっていると思いますが  2バイト目の先頭ビットが 0 の場合はUTF-8コードが  壊れていると判定してもいいんですか?    それとも、2バイトの先頭ビットが0の場合  次のバイトを1バイト文字とし変換してあげて  0x41 → A として変換するなどといった  特殊な仕様が隠れていたりするのでしょうか?    今のところ壊れていると判断しているのですが、  UTF-8ではないコードだったりする可能性もあるかな?  っと思い質問いたしました。  少し不安だったので、しっていましたら、教えてください。                          以上   検索ワード UTF-8 2バイト目 1バイト文字

  • AX3S Pro ビデオドライバー??の問題

    AX3S Pro (CPU セレカッパ900)Win2000 の自作機です。 現在不思議な現象に悩まされています。 (1)電源を入れる。 (2)OSが立ち上がる。 (3)ビデオモードが最大1024*768に設定される。(最大解像度は1024*768まで選択可能) (4)「シャットダウン」ではなく「再起動」する。 (5)ビデオモードが最大1152*864に設定される。(最大解像度は1152*864まで選択可能) しかし、(4)で「シャットダウン」して、再度立ち上げると、ビデオモードは最大1024*768が設定され、それ以上の解像度は選択できない。 つまり、普通に立ち上げると最大解像度が1024*768までしか設定できなくて その状態から再起動すると最大1152*864まで設定できるようになっています。 ビデオドライバは、マザーに付属していたドライバをOSに合わせてインストールしていますので、ドライバには問題ないと思うのですが、同じような現象を経験した方や、直しかたがわかる方がいらっしゃいましたら、ご指導ください。

  • Excel2007のオートフィルタ機能について

    対象ソフト:Excel2007 オートフィルタで絞ったデータを「数値と値のクリア」でクリアすると、絞ったデータのみがクリアされるはずが、絞ってしないデータまでクリアされてしまうことがあります。 見つけたのは以下のパターンです。  A B C D E F 1  ● 2  ×  3 ● 【現象が出るケース】 1.先頭行にオートフィルタを設定 2.オートフィルタでB列の●を選択 3.●のセルを選択し、「数値と値のクリア」を実行 ⇒B1~B3までのデータがすべて消えてしまいます。 【現象が出ないケース】 1.先頭行にオートフィルタを設定 2.オートフィルタでB列の×を選択、個数を確認します 3.オートフィルタでB列の●を選択 4.●のセルを選択し、「数値と値のクリア」を実行 ⇒B2の×は残っています。 この現象は故意的なのでしょうか? それともバグなのでしょうか? どちらにしても、パターンを覚えておかないとデータを操作する際に、正確なリストを作成できずに困っております。 解決法や良い対処策があれば教えてください。

  • byte型のマイナスの扱いについて

    COMポートを使用して通信をしようとしています。 制御コマンドを1byte区切りで送信するのですが、byte型で扱う際、-128~-1の扱いが思うようにいきません。 ウェブを検索して符号拡張など検討してみたのですが解決できませんでした。 いろいろやってみましたが、基本的には byte[] byteArray = {0x12,0x20,-0x80}; String str = new String(byteArray,0); BufferedWriter bw; bw.write(str); このようになっています。 0x12や0x20の送信は、信号を調べる機器にて正しく送信されていることが確認できたのですが、-0x80は予期せぬ値になってしまいます。 -0x80では、16進でC0,3Fなどになってしまいます。 二進で先頭に1がたっていることが原因なのでしょうか。。。 int型にしたり、byte型そのままで送ったり、0x40から左にビットシフトして(&ffも忘れずに)代入したりもしたのですが、結果は同じでした。 ご教授宜しくお願いします!

    • ベストアンサー
    • Java
  • word2007の表で文字抜け

    初めて、質問をさせて頂きます。 Word2003で作成したファイルをWord2007で[互換モード]で開き ファイルを保存後、再度、そのファイルを開くと 表の中に表を作成し部分の文字や、数値の一部が消えてしまうという現象が毎回ではないですが 起きてしまう事があります。 例:あいうえお → あ うえお 回避方法などご存知の方宜しくお願い致します。 当方のPC OS:WindowsXPsp3 Office:2007ProPlus

  • エクセルのバグ?

    エクセル2010. ウィンド枠の固定で不思議な現象。 シート1、B2セルを選択、ウィンド枠の固定。       (1行目と1列目が固定される)。 シート2、先頭行の固定。 そして、シート2をマウスで横スクロールすると、 あら不思議、縦もスクロール。 縦、横、同時スクロール? これは、バグですか??? 横スクロールで縦もスクロールが仕様なのですか???? 縦と横が同時にスクロールしても、メリットはないですが?

  • ファンコンについて

    NZXT/SENTRY LX http://www.amo.co.jp/parts/sentry/index.html を組みこんだのですが、他の追加空冷ファンは問題ないのですが、こちらのケース Overseer RX-I http://www.thermaltake.co.jp/products-model.aspx?id=C_00001803 の付属フロントとトップの20cmファンだけがコントロールできません。 症状としては動作はするのですがオート/マニュアルモードともに20cm2個のみ回転レベルメーターが無表示でマニュアルにして選択しようとすると20cm2個のみが選択ができずに選択肢が飛びます。(20cmの接続が1と2だとすると選択できるのは3,4,5の3つしか選択できない状態) また、接続No.を変えても同様に20cmを接続したNo.が同様の現象になります。 SENTRY LX の不具合も疑ったのですが新品に交換しても同様でした。 そうすると付属20cmとのアンマッチだと思うのですが、 他メーカーの20cmに交換すると正常動作するでしょうか? 使用経験のある方がおりましたら教えてくださると助かります。

  • Office2003再インストールするとどうなる?

    Office2003を入れています。 Office2007互換パックを入れています。 先日、Microsoftの更新プログラムが入ってから(KB2289187)動作不良を起こしました。 現象ですが、Word2007やExcel2007で作られたファイルを開くことができなくなるという症状です。 ファイルの種類で登録されているファイルの種類を確認すると… XLA、XLAM、XLB、XLS、XLSM、XLSX DOC、DOCM、DOCX これらの拡張子設定が「Microsoft Open XML Converter」になってしまいます。 本来ならば、Excel関係のものは「Microsoft Office Excel」、Word関係のものは「Microsoft Office Word」になるべきものなのに。 どうやらこの現象は全ての機器ではなく、一部の機器(機種)に限って起こる現象みたいです。 当方にある数百台(Fujitsu LIFEBOOK A540/A)がこの現象が起き、その他の数千台(Fujitsuも東芝もNECも)はこういった現象にならなかったです。 Microsoftに確認しましたが、どうやら他でもこの現象があるらしく調査中との返答はいただきました。 この不具合を直すために、暫定的ですが、更新プログラムが追加されてWordやExcelのファイルが開けなくなっているPCにOffice2003をプログラムの追加と削除から「変更」を選択し、「再インストール/修復」→「Officeを再インストールします」を選択して再インストールさせています。 この作業をする事により、WordやExcelのファイルを開く事ができるようになりました。 ここで質問ですが… 更新プログラムがPCにインストールされた後、Office2003を再インストールしたら問題でてきますでしょうか? 更新プログラムが入っているのだから、新しいプログラムになったのに、旧プログラムで上書きしたら更新プログラムの意味がない…とか… こういう問題点が出そうというおおまかな回答でもかまいません。 よろしくお願いいたします。 もし…可能ならば… このような現象が出た訳(一部のPCはこうなった、その他のPCはそうならない)がわかる方。 回答よろしくお願いします。

  • midiファイルの歌詞情報等で

    midiファイルの表現には色々と制約が多いので、自分でより高度なことを簡単に扱えるような独自のファイル形式を作っています。 (その形式においては処理を簡易化するためにデルタタイムに当たる数値は開始点からの絶対値だったり、エンディアンはそのファイルを作ったOSを何らかの方法で特定できるようにしておいて、それに合わせるようになってたり、固定長だったりとか、微妙に仕様は違いますが) しかし、やはりDAWのようなソフトならば当然他のソフトとある程度の互換性は持たせたいので midiファイルとしてのInput Output、つまり結果的には編集も可能にしているところなのですが(XFフォーマットVer2.03あたりを意識しながら) このmidiファイル、(あるいはXFフォーマット限定の情報でも)に関して 歌詞情報等でUnicode文字を使えるような標準の方法(メタイベントか何かを利用して)ってありますか? ※通常はマルチバイトだけで、そういう事は独自拡張しか方法はないということならば、Unicode文字は自分のつくっているソフト専用でもいいので『独自に対応』しておき、通常はマルチバイトにしようと思っています。 (標準であるかないかにかかわらず、選択可にするようには組みそうですが)

  • VBAで符号無し整数

    BMPファイルを読み込んで配列に書き出すプログラムを作ろうとしています。 BMPファイルの構造は http://www.geocities.co.jp/Playtown-Knight/6845/sd_doc/format_windib.html のページに書かれてあるのですが、 typedef unsigned short WORD typedef unsigned long DWORD typedef unsigned char BYTE typedef long LONG などの「符号無し整数」で定義された変数を使う必要があります。 http://homepage1.nifty.com/rucio/main/kiso/DataType.htm のページにあるようにVBではUlongやUshortが使えるようなのですが、 VBA上で Dim bfSize As ULong とすると、「ユーザー定義型は定義されていません」 と表示されます。 参照設定のところで何か設定を行えば良いと思うのですがどこを設定すれば良いのでしょうか? もし、使えないとして、VBAで2バイトや4バイトを数値として読み込むにはどうすれば良いでしょうか?

専門家に質問してみよう