これらは私の課題です:
n
キロバイトのメモリ内のアドレス行の数を見つけるプログラムを作成します。n
は常に2の累乗であると想定します。
サンプル入力: 2
サンプル出力: 11
特定のコーディングの助けは必要ありませんが、アドレス行とメモリの関係はわかりません。
バス多重化なしで非常に簡単に表現すると、メモリをアドレス指定するために必要なビット数は、そのメモリにアクセスするために必要な行(アドレスまたはデータ)の数です。
ウィキペディア の記事からの引用、
32ビットアドレスバスを備えたシステムは2をアドレス指定できます32 (4,294,967,296)メモリの場所。
簡単な例として、これを考えてみましょう。3つのアドレスライン(A
、B
、C
)があるため、3ビットを使用して形成できる値は次のとおりです。
A B C
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
合計8つの値。したがって、ABC
を使用すると、これらの8つの値のいずれかにアクセスできます。つまり、これらのメモリアドレスのいずれかに到達できます。
したがって、TL; DRの場合、単純な関係は、n
行の数、2を表すことができますn アドレスの数。
アドレスラインは通常、CPU /チップセットとメモリ間の物理的な接続を指します。これらは、メモリ内でアクセスするアドレスを指定します。したがって、タスクは、入力番号をアドレスとして渡すために必要なビット数を見つけることです。
あなたの例では、入力は2キロバイト= 2048 = 2 ^ 11であるため、答えは11です。入力が64キロバイトの場合、答えは16(65536 = 2 ^ 16)です。