ワードとバイトの違いは何ですか?


93

私はいくつかの研究をしました。バイトは8ビットで、ワードはメモリ上でアドレス指定できる最小単位です。単語の正確な長さはさまざまです。私が理解していないのは、バイトを持つことの意味は何ですか?8ビットと言ってみませんか?

私は教授にこの質問をしたところ、最近のほとんどのマシンはバイトアドレス指定可能であると彼は言ったが、それは何を意味するのだろうか?


12
「単語」という用語はあいまいであるため、避けることをお勧めします。または、16ビットワード、32ビットワードなどと言って、正確にします
starblue

2
単語を大きくしたり小さくしたりすることは有利ですか?

2
@ quest4knoledgeより大きな単語は、より大きなポインタ(別名:より多くのRAM)を可能にし、より大きな数をすばやく処理できるようにします。また、大きなブロックで作業することにより、memsetなどの一部の操作を高速化できます。ただし、より大きなワードを持つプロセッサは、プロセッサ内により多くのトランジスタを必要とし、少し多くのエネルギーを消費する可能性があります。
VoidStar

@VoidStarと大きな単語は、アドレス空間が小さいことを意味しますか、それとも混乱しますか?

1
「バイトを持つことの意味は何か」という質問に答えるために-それは歴史です。CPUは、「バイト」よりも大きなものを処理できるようにはなりませんでした(以前のプロセッサはニブル(4ビット)しか処理しませんでしたが、この用語は実際には使われていません)。ノートの最初のCPUはIntel 8086/8088でした。これは、「バイト」を中心に構築された命令を処理するように設計されました。これも、アドレス指定可能なメモリの基本単位がバイトであるため、GigaBytesなどのxBytesでメモリを参照する理由です。'Kは、最初のPCが16であった64バイトに拡張可能なKiloBytesへの参照です。
フレッド

回答:


169

バイト:現在、バイトはほとんど常に8ビットです。ただし、常にそうであるとは限らず、「標準」やこれを規定するものはありません。8ビットはそれを扱うのに便利な数なので、事実上の標準になりました。

ワードプロセッサがデータを処理するとき本来のサイズ(レジスタサイズ)。今日遭遇する最も一般的なワードサイズは、8、16、32、64ビットですが、他のサイズも可能です。たとえば、いくつかの36ビットマシン12ビットマシンさえありました。

バイトは、 CPUのためのアドレス可能な最小単位です。シングルビットを設定/クリアしたい場合は、まずメモリから対応するバイトをフェッチし、ビットをいじってから、バイトをメモリに書き戻す必要があります。

対照的に、ワードは、プロセッサが一度に処理(加算や減算など)を実行できるビットの最大のチャンクです。一部のプロセッサでは、タスクごとにワードサイズが異なる可能性があるため、その定義は少しあいまいです(たとえば、整数処理と浮動小数点処理)。ワードサイズは、ほとんどの操作で使用されます。

ポインタサイズが異なるプロセッサもいくつかあります。たとえば、8086は16ビットプロセッサです。つまり、そのレジスタは16ビット幅です。しかし、そのポインタ(アドレス)は20ビット幅であり、2つの16ビットレジスタを特定の方法で組み合わせることによって計算されました。


9
すばらしい答えです。「対照的に、単語はプロセッサが一度に処理できるビットの最大のチャンクです。実際、これは最も一般的なビットのチャンクなどです。 時間の経過とともに進化してきた多くのアーキテクチャのワードサイズは、それほど広くはありませんが、多くの場合、最も広い値で実行できることが制限されています。
ロスパターソン

11
追加のクレジットとして、「ニブル」は半バイトの一般的な用語です。これは、初期のマイコンのCPU時代(の間に生じた例えば、インテル8080)、その後でバイトは8ビットに落ち着いていたので、常に、4ビットであることを理解されました。
ロスパターソン、

6
現在、8ビットバイトが標準です。IEC 80000-13:2008を参照してください。
user2431763 2015年

1
@DebanjanDhar:はい、彼らは無関係です。唯一の関係は、ページが(AFAIK)常にワードサイズの倍数であることです。
DarkDust 2016

4
x86(通常)は事態を複雑にします。Intelの用語でwordは、デフォルトのオペランドサイズが32ビット(dword)、整数レジスター幅が64ビット(qword)である最近のx86 CPUでも、a は16ビットです。また、xmmレジスタは128ビット幅です(movdqaダブルクワッドに移動)。メモリバスは少なくとも64ビット幅(および64バイトのバーストで転送=キャッシュライン)であり、実行ユニットからキャッシュへのパスは、少なくとも128ビット幅、または256ビットまたは512ビット幅です。現代のx86のネイティブマシンワードサイズが何であれ、それは16ビットではありませんが、現代のx86は8086の用語を使用しています。
Peter Cordes、2018

16

私が理解していないのは、バイトを持つことの意味は何ですか?8ビットと言ってみませんか?

バイトが必ずしも8ビットであるとは限らないという技術的なポイントは別として、用語がある理由は単純な人間の性質です。

  • 努力の経済性(怠惰)- 「8ビット」ではなく「バイト」と言う簡単

  • 部族主義-人々のグループは、専門用語/私的な言語を使用して、他の人と区別することを好みます。

ただ流れに乗ってください。あなたはそれについて不平を言って、50年以上に渡って蓄積されたIT用語と文化的な手荷物を変えるつもりはありません。


FWIW-「ハードウェアアーキテクチャに依存しない8ビット」が「オクテット」であることを意味するときに使用する正しい用語。


オクテットはバイトのフランス語翻訳にすぎないと思った、ありがとう;)
Abdelouahab Pp

8

バイト

私はC ++の観点からこの質問に答えようとしています。

C ++標準では、「バイト」を「実行環境の基本文字セットのメンバーを保持するのに十分な大きさのアドレス可能なデータの単位」と定義しています。

これは、実装の基本的な文字セットに対応するのに少なくとも十分な隣接ビットでバイトが構成されることを意味します。つまり、可能な値の数は、個別の文字の数以上でなければなりません。米国では、基本的な文字セットは通常、ASCIIおよびEBCDICセットであり、それぞれ8ビットで対応できます。したがって、1バイトが少なくとも8ビットを持つことが保証されます。

つまり、1バイトは、1つの文字を格納するために必要なメモリの量です。

C ++実装の「ビット数」を確認する場合は、「limits.h」ファイルを確認してください。以下のようなエントリが必要です。

#define CHAR_BIT      8         /* number of bits in a char */

ワードは、マシン/システムによって一緒に(つまり1回の試行で)処理できる特定のビット数として定義されます。あるいは、Wordは、1回の操作でCPUとRAMの間で転送できるデータ量を定義していると言えます。

コンピュータマシンのハードウェアレジスタはワードサイズです。ワードサイズは、可能な最大のメモリアドレスも定義します(各メモリアドレスはバイトサイズのメモリを指します)。

注– C ++プログラムでは、メモリアドレスはワードではなくメモリのバイトを指します。


6

8ビットと言ってみませんか?

すべてのマシンが8ビットバイトを備えているわけではないからです。あなたがこれをタグ付けするのでC、見上げるCHAR_BITlimits.h


6

ワードは、プロセッサ内のレジスタのサイズです。これは、add、mulなどのプロセッサ命令がワードサイズの入力にあることを意味します。

しかし、最新のアーキテクチャのほとんどは、8ビットのチャンクでアドレス可能なメモリを備えているため、「バイト」という単語を使用すると便利です。


つまり、ある意味で「バイト」という用語は、単に便宜上使用されているのでしょうか。

はい、「バイト」はこの用語が発明されたときに特に便利でした。多くの慣習と同様に、いったん設定すると、それが持続します。バイトベースの用語がコンピュータを全体像で理解しやすくするかどうかはわかりませんが、これは支配的な慣習であり、すぐに変更する必要はありません。
VoidStar

バイトは、テキストで文字として使用された単位に使用される用語です。歴史的には、6〜9ビットのサイズのバイトがありました。
starblue

@starblueどうしてcharが単語よりも少ないスペースを取ることができるのですか?

1
@ quest4knoledge:メモリはその単語よりも小さなチャンクに格納されるため。ワードは32ビット(または新しいマシンでは64ビット)です。個々の文字を1行1列で処理するアルゴリズムでは、CPU内でのみ完全なワードを使用し、RAMに戻すと、より密にパックされます。
VoidStar

5

このコンテキストでは、単語は、メモリを操作するときにマシンが使用する単位です。たとえば、32ビットマシンでは、ワードは32ビット長で、64ビットでは64ビット長です。ワードサイズはアドレス空間を決定します。

プログラミング(C / C ++)では、単語は通常int_ptr、ポインタと同じ長さの型で表されます。これにより、これらの詳細が抽象化されます。

ただし、Win32 APIなどの一部のAPIは、WORD(16ビット)やDWORD(32ビット)などのタイプを持っているため、混乱する可能性があります。その理由は、APIが最初は16ビットマシンを対象としていたため、32ビットマシンに移植され、次に64ビットマシンに移植されたためです。ポインタを格納するには、を使用できますINT_PTR。詳細はこちらこちら


4

すべての回答は高水準言語、主にC / C ++を想定しているようです。

しかし、質問には「アセンブリ」というタグが付いており、私が知っているすべてのアセンブラ(8ビット、16ビット、32ビット、および64ビットCPUの場合)では、定義がはるかに明確です。

byte  = 8 bits 
word  = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")

3
いいえ、これらのサイズは16ビットマシンでのみ有効です。16ビット時代からの遺産であり、MSがこれを修正する気にならなかったため、これらのマクロをまだ使用しているWindowsプログラミングにおそらく慣れているでしょう。
DarkDust 2013

2
ところで、ワード(実際にはバイトも)のサイズは変わる可能性があるため、ISO-Cにはint<X>_tuint<X>_tタイプ(およびそれ以上)があり、特定のビットサイズの変数/パラメーターが必要な場合に使用する必要があります。
DarkDust 2013

@DarkDustアセンブリ言語についてここで話します。C標準は関係ありません。ところで、私は1980年からアセンブリをプログラミングしていて、同じ名前が使用されていました。(まあ、おそらくqwordを除いて)
johnfound 2013

しかし、私は例外を見つけました:GNUでは、.word32ビットの可能性があります(たとえば、Sparcの場合)。
DarkDust 2013

ASはアセンブラではありません。これは、HLLコンパイラーのバックエンドになることだけを目的として作成された、醜く、不自由で、惨めで、変異したものです。
johnfound 2013

3

単語の正確な長さはさまざまです。私が理解していないのは、バイトを持つことの意味は何ですか?8ビットと言ってみませんか?

ワードの長さはさまざまですが、現代のすべてのマシン、および私がよく知っている古いアーキテクチャでも、ワードサイズはバイトサイズの倍数です。したがって、可変ワードサイズに関して、「8ビット」ではなく「バイト」を使用することに特別な欠点はありません。

それ以外に、「8ビット」でバイト(またはオクテット1)を使用するいくつかの理由があります。

  1. より大きな単位は、非常に大きな数または非常に小さな数を避けるために便利です。「0.000000003秒と言うことができるのに3ナノ秒と言う理由」または「1,000グラムと言うことができるのに1キログラムと言う理由」などと尋ねることもできます。
  2. 多くの操作は通常、バイトレベルではなくバイトレベルで機能するため、利便性を超えて、バイトの単位は何らかの形で1 ビットと同じくらい基本的です:メモリのアドレス指定、動的ストレージの割り当て、ファイルまたはソケットからの読み取りなど。
  3. ユニットのタイプとして「8ビット」を採用したとしても、「2バイト」ではなく「2つの8ビット」と言っても、新しいユニットを数字で始めるのは非常に混乱することがよくあります。たとえば、誰かが「100ビットの8ビット」と言った場合、100ビットではなく108ビットとして簡単に解釈できます。

1この回答ではバイトを8ビットと見なしますが、これは普遍的に当てはまるわけではありません。古いマシンではバイトのサイズが異なる場合があります(6ビットなど)。マシンに関係なく、オクテットは常に8ビットを意味します(したがって、この用語はネットワークプロトコルの定義によく使用されます)現代の使用では、バイトは8ビットと同義語として圧倒的に使用されています。


2

データシートおよびコンパイラに存在する用語が何であれ、「バイト」は8ビットです。特に「バイト」という単語は「By Eight」という表現から来ているので、要求者と一般性をもっとあいまいな例外と混同しないようにしましょう。私は30年以上半導体/エレクトロニクス業界で働いており、8バイトを超えるものを表現するために「バイト」が使用されることはかつてありませんでした。


珍しいはい(私たちは知っています。例は、テキサスインスツルメンツc54xグーグルテキサスインストルメントc54xバイトです。ti.com/lit/ug/spru393/spru393.pdf 「 'C55x命令は、8ビットから48ビット「。stackoverflow.com/questions/2098149/...
barlop

1
そこからは全く出てこない。この用語は、1950年代後半にIBMでW. Buchholtzが実際に作り出したものです。出典:bobbemer.com/BYTE.HTM。Bob Bemerによれば、タイプミスによる混乱(「ビット」との)を避けるために、「バイト」よりも「バイト」が選択されました。彼は知っているだろう。彼はそこにいた!
スティーブンC

(たった30年?あなたは単なるホイッパースナッパーです。自然な「バイト」サイズが8ビットではないシステムでプログラムすることを学びました:
Stephen C

1

リファレンス:https : //www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

コンピュータストレージの基本単位はビットです。ビットには、0と1の2つの値のいずれかを含めることができます。コンピューター内の他のすべてのストレージは、ビットのコレクションに基づいています。十分なビットがあるとすれば、コンピュータが表すことができるものの数は驚くべきものです。1バイトは8ビットであり、ほとんどのコンピューターでは、最小の便利なストレージチャンクです。たとえば、ほとんどのコンピューターにはビットを移動する命令はありませんが、バイトを移動する命令はあります。あまり一般的ではない用語は単語です。これは、特定のコンピュータアーキテクチャのネイティブデータユニットです。ワードは1バイト以上で構成されます。たとえば、64ビットのレジスタと64ビットのメモリアドレス指定を備えたコンピュータには、通常64ビット(8バイト)のワードがあります。コンピューターは、一度に1バイトではなく、ネイティブのワードサイズで多くの操作を実行します。コンピュータストレージ、ほとんどのコンピューターのスループットとともに、一般にバイトおよびバイトのコレクションで測定および操作されます。キロバイト(KB)は1,024バイトメガバイト(MB)、1,024 2バイトギガバイト、またはGB、1,024 3バイトテラバイト(TB)、1,024 4バイトペタバイト(PB)は1,024 5バイトコンピュータメーカーはこれらの数値を四捨五入して、1メガバイトは100万バイト、1ギガバイトは10億バイトと言っています。ネットワーク測定は、この一般的なルールの例外です。それらはビットで与えられます(ネットワークが一度に少しずつデータを移動するため)024 5バイトコンピューターの製造元は、これらの数値を四捨五入して、メガバイトは100万バイト、ギガバイトは10億バイトであると説明しています。ネットワーク測定は、この一般的なルールの例外です。それらはビットで与えられます(ネットワークが一度に少しずつデータを移動するため)024 5バイトコンピューターの製造元は、これらの数値を四捨五入して、メガバイトは100万バイト、ギガバイトは10億バイトであると説明しています。ネットワーク測定は、この一般的なルールの例外です。それらはビットで与えられます(ネットワークが一度に少しずつデータを移動するため)


-1

マシンがバイトアドレス指定可能で、ワードがメモリ上でアドレス指定できる最小単位である場合、ワードはバイトになると思います。


うん。TMS320C54xx(Texas InstrumentsのDSPの1つ)のアドレス指定可能なメモリの最小単位は16ビット長で、これは汎用レジスターの最小サイズでもあります。そして、TI Cコンパイラはchar = short = int = 16ビットを定義します。
Alexey Frunze

いいえ、ほとんどのRISCマシンは32ビットワードを備えていますが、1バイトアドレス指定できます。例えばMIPSに、word 間違いなく 32ビットを意味し、そこだlb8ビットをロード(負荷バイト)命令。
Peter Cordes、2018

-1

8ビットのグループは、バイトと呼ばれます(特定のアーキテクチャでは、そうでない場合を除きます)。

ワードは、プロセッサの命令セットおよび/またはハードウェアによりユニットとして扱われるビットの固定サイズのグループです。つまり、汎用レジスターのサイズ(通常は1バイト以上)はワードです。

Cでは、単語は最もよく整数と呼ばれます=>int


7
8ビットのグループはオクテットと呼ばれます。
cnicutar '13年

2
正しい:この用語octetは、byteという用語に関連する曖昧さのために、8ビットのシーケンスを明示的に示すように定義されました。しかし、私はbyteより良い音が好きです:)
tolitius

2
@tolitius:「でもbyte良い音が好き」の+1:いくつかのニッチなシステムではこれだけで安全ではないのではないかと強く疑います。バイトの「混乱」はおそらく8ビット以外のサイズです最近は関係ありません。
Joachim Sauer

-1

BYTEおよびWORDの用語は、参照されるプロセッサのサイズに関連しています。最も一般的なプロセッサは、8ビット、16ビット、32ビット、または64ビットです。これらはプロセッサのワード長です。実際には、数値の長さが何であれ、WORDの半分はBYTEです。これに備えて、BYTEの半分はNIBBLEです。


いいえ、32ビットワードと8ビットバイトのCPU(MIPSやARMなど)では、ハーフワードは2バイトです。
Peter Cordes、2018

-3

実際、一般的な用法では、単語が16ビットと同義語になり、バイトが8ビットと同じようになっています。32ビットCPUの「ワードサイズ」は32ビットであるため、少し混乱する可能性がありますが、データのワードについて話す場合、16ビットを意味します。32ビットワードサイズのマイクロコントローラーは、命令を「長い」と呼びます(ワードとダブルワードの混同を回避するため)。


1
それは完全にCPUタイプに依存します。ご指摘のとおり、IA32以外の32ビットマシンでは、「ワード」は通常32バイトです。
ロスパターソン

2
@RossPattersonこれは、ソフトウェアを開発しているか、夕食を食べているかに完全に依存します。
エンジニア

ARM / MIPS /その他の主流のRISCアーキテクチャには32ビットワードがあります。これは、レジスタ幅(これらのISAの32ビットバージョン)と命令幅です。16ビットはハーフワードldrhので、ARM命令は 16ビットをロードして32ビットレジスタにゼロ拡張するのを好みます。またはldrsh、16ビットをロードして符号拡張します。
Peter Cordes
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.