user-0 提问: 在32位机中为什么1KB是10位？

回复:
user: user-1
content: 虽然没有按位寻址，但是既然楼主问了，那我们就假设有吧。  最小寻址单位为字节（Byte）时，寻址1KB=1024B=2^10B，所以要10位来寻址，要10根。 寻址1B=2^0B，所以要0位来寻址，即不需要地址总线。（你就这么一个地方可以放数据，还要我告诉你我要去哪儿找吗？？）  最小寻址单位为位（bit）时， 寻址1KB=1024B=2^10B=2^13bit， 所以要13根。 寻址1B=2^3bit，所以需要3根。因为根本不存在按位寻址，所以也没有楼主所说的“其实是8根”。  综上，其实寻址所需的位数（根数？）跟最小寻址单位没关系，主要是看要从多少个最小单位中找到特定的一个。 如果最小寻址单位是KB，那么一根线就可以寻址2KB的空间。  不知道这样楼主理解了没。。。

user: user-2
content: 1024*8的意思是存1024个数 每个8位  10是地址总线的个数  2^10 =1024  可以寻址范围是1-1024 寻到的是8位的RAM 你可以这么理解 一个8位的RAM由一个3-8译码器 一个8-1的选择器和一个8位的锁存器构成吧 如果两个8位的RAM拼成16位的RAM的话 就需要一根地址总线来从这两个8为的RAM里面选择一个 这个即使1-2选择器 1024的话 就是10跟地址总线 不知道你懂了没有 有兴趣的话可以看看 编码的奥秘

user: user-3
content: 引用 31 楼 xhw88398569 的回复:引用 19 楼 zhao4zhong1 的回复:据我所知：CPU都是按字节寻址，没有按位寻址的。是按照机器字长寻址，然后再偏移吗？ 《计算机组成原理》 地址总线、数据总线、RAM电路、……

user: user-4
content: 楼主在题目中已经确认 1B是8位，这是前提，怎么又成了问题了。

user: user-5
content: 引用 19 楼 zhao4zhong1 的回复:据我所知：CPU都是按字节寻址，没有按位寻址的。是按照机器字长寻址，然后再偏移吗？

user: user-6
content: char 就是一个字节 1024个字节就是1KB 一字节8位 1024个字节   1024*8

user: user-5
content: 引用 33 楼 zhao4zhong1 的回复:引用 31 楼 xhw88398569 的回复:[quote=引用 19 楼 zhao4zhong1 的回复:] 据我所知：CPU都是按字节寻址，没有按位寻址的。是按照机器字长寻址，然后再偏移吗？ 《计算机组成原理》 地址总线、数据总线、RAM电路、……[/quote]要学的太多了，刚学python，又要学C++，Web。。。还想学服务器。刚毕业，大学都学的硬件和c

user: user-7
content: 因为1字节即1Bytes = 8bit  即8位, 只能表示  0-255的数字即   0 - 0xFF    9bit能表示0-511    即 0x0  -  0x1FF 10bit能表示0-1023        即 0x0 -  0x3FF  所以10bit就能表示1KB了.

user: user-8
content: 引用 28 楼 bbs2241 的回复:你没搞清楚大B，小b。一般说的大B是指byte，小b是bit  1Byte = 8bit 1KB = 1024B = 1024*8 bit

user: user-9
content: 1K是指的1024个bit 是一个存储空间的大小 因为1024 = 2^10 所以占10个位  和电脑是32位 64位没有任何关系

user: user-3
content: #include <stdio.h> char *human(__int64 v) {     __int64 g;     int i,j;     char N[8]=" KMGTPE";     static char s[20];      g=512i64;     for (i=0;i<6;i++) {         if (v<g) break;//         g=g<<10;     }     j=(i-1)*10;     if (j<0) j=0;     if (j==0) {         if (i==0) {             sprintf(s,"%I64d B",v);         } else {//i==1             sprintf(s,"%.4lg KB",(double)v/1024.0);         }     } else {//j>0         v=v>>j;         sprintf(s,"%.4lg %cB",(double)v/1024.0,N[i]);     }     return s; } int main() {     __int64 d,t;     while (1) {         printf("Input a number(0..%I64d):",0x7FFFFFFFFFFFFFFFi64);         fflush(stdout);         rewind(stdin);         if (1==scanf("%I64i",&d)) {             if (d>=0i64) break;//         }     }     printf("%I64d is %s\n",d,human(d));      printf("\n");     d=0i64;t=512i64;     while (1) {         printf("0x%016I64x is %s\n",d,human(d));         d+=t>>2;         if (d>=t) {             d=t-1i64;             printf("0x%016I64x is %s\n",d,human(d));             d=t;             printf("0x%016I64x is %s\n",d,human(d));             if (d>=0x2000000000000000i64) {                 d=0x7FFFFFFFFFFFFFFFi64;                 printf("0x%016I64x is %s\n",d,human(d));                 break;//             }             if (d<0x0800000000000000i64) {                 d=d<<8;                 t=t<<10;             } else {                 t=d<<1;                 d+=t>>2;             }         }     }      return 0; } //Input a number(0..9223372036854775807):0x33333333333 //3518437208883 is 3.199 TB // //0x0000000000000000 is 0 B //0x0000000000000080 is 128 B //0x0000000000000100 is 256 B //0x0000000000000180 is 384 B //0x00000000000001ff is 511 B //0x0000000000000200 is 0.5 KB //0x0000000000020000 is 128 KB //0x0000000000040000 is 256 KB //0x0000000000060000 is 384 KB //0x000000000007ffff is 512 KB //0x0000000000080000 is 0.5 MB //0x0000000008000000 is 128 MB //0x0000000010000000 is 256 MB //0x0000000018000000 is 384 MB //0x000000001fffffff is 512 MB //0x0000000020000000 is 0.5 GB //0x0000002000000000 is 128 GB //0x0000004000000000 is 256 GB //0x0000006000000000 is 384 GB //0x0000007fffffffff is 512 GB //0x0000008000000000 is 0.5 TB //0x0000800000000000 is 128 TB //0x0001000000000000 is 256 TB //0x0001800000000000 is 384 TB //0x0001ffffffffffff is 512 TB //0x0002000000000000 is 0.5 PB //0x0200000000000000 is 128 PB //0x0400000000000000 is 256 PB //0x0600000000000000 is 384 PB //0x07ffffffffffffff is 512 PB //0x0800000000000000 is 0.5 EB //0x0c00000000000000 is 0.75 EB //0x0fffffffffffffff is 0.999 EB //0x1000000000000000 is 1 EB //0x1800000000000000 is 1.5 EB //0x1fffffffffffffff is 1.999 EB //0x2000000000000000 is 2 EB //0x7fffffffffffffff is 7.999 EB

user: user-3
content: 据我所知：CPU都是按字节寻址，没有按位寻址的。

user: user-0
content: 引用 17 楼 layershow 的回复:[quote=引用 14 楼 u010412073 的回复:] [quote=引用 10 楼 ForestDB 的回复:] 内存寻址时，是8个bit一起一次读出来的。另外1KB＝1024B＝2的10次B，按字节寻址是10根？ 那么同理1B＝8bit＝2的3次bit，如果按位寻址（不按字节），那么应该是3根就可以？但其实是8根吧？ [/quote] 1KB＝1024B＝2的10次B 1B＝8bit＝2的3次bit  这两个不同理，1KB = 1024B 与 1B = 1B 才是同理 按什么寻址是指编号单位，不是让你来换算位的 例如按照 4GB寻址  0 就是第一个 4GB，1就是第二个 4GB，用 1 根线就能表示这两个地址（状态 0 和 1） 这种方式的地址空间 1 根线映射了 8GB 的空间，但是，你注意这 4GB 你传不回来，不可能用这 1 根线传 4GB 数据 所以你不要想小于 8 根线能取回一个字节 你对这些概念都混淆了 [/quote] 这两个关系也不对应么？ KB＝1024B＝1024x8bit＝2的13次bit，需要13根？（按位寻址计算） 1B＝8bit＝2的3次bit，如果按位寻址（不按字节），那么应该是3根就可以？但其实是8根吧？ 另确认下在按字节寻址和按bit寻址时1KB和1B分别需要相应地址线几根？（4种情况）

user: user-10
content: 引用 14 楼 u010412073 的回复:[quote=引用 10 楼 ForestDB 的回复:] 内存寻址时，是8个bit一起一次读出来的。另外1KB＝1024B＝2的10次B，按字节寻址是10根？ 那么同理1B＝8bit＝2的3次bit，如果按位寻址（不按字节），那么应该是3根就可以？但其实是8根吧？ [/quote] 1KB＝1024B＝2的10次B 1B＝8bit＝2的3次bit  这两个不同理，1KB = 1024B 与 1B = 1B 才是同理 按什么寻址是指编号单位，不是让你来换算位的 例如按照 4GB寻址  0 就是第一个 4GB，1就是第二个 4GB，用 1 根线就能表示这两个地址（状态 0 和 1） 这种方式的地址空间 1 根线映射了 8GB 的空间，但是，你注意这 4GB 你传不回来，不可能用这 1 根线传 4GB 数据 所以你不要想小于 8 根线能取回一个字节 你对这些概念都混淆了

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:B － Byte b - bit K - 1024求大神对上面的问题解释下？

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:B － Byte b - bit K - 1024 1KB＝1024B＝2的10次B，按字节寻址是10根？ KB＝1024B＝1024x8bit＝2的13次bit，需要13根？（按位寻址计算） 1B＝8bit＝2的3次bit，如果按位寻址（不按字节），那么应该是3根就可以？但其实是8根吧？ 为什么这种关系不对应？前面的＝号理解为有多少种情况？后面的理解为需要几根？ 另确认下在按字节寻址和按bit寻址时1KB和1B分别需要相应地址线几根？（4种情况）

user: user-0
content: 引用 10 楼 ForestDB 的回复:内存寻址时，是8个bit一起一次读出来的。另外1KB＝1024B＝2的10次B，按字节寻址是10根？ 那么同理1B＝8bit＝2的3次bit，如果按位寻址（不按字节），那么应该是3根就可以？但其实是8根吧？

user: user-3
content: B － Byte b - bit K - 1024

user: user-11
content: 你没搞清楚大B，小b。一般说的大B是指byte，小b是bit

user: user-0
content: 引用 10 楼 ForestDB 的回复:内存寻址时，是8个bit一起一次读出来的。是不是32根线的任一一种状态就是1B？。只有 一根线的话可以确定2B？