在32位机中为什么1KB是10位?

lied 2014-07-14 10:39:54
如题疑惑有:
〈1〉1KB是1024B,1B是8位,那么应该是1024x8=2的13次需要13位啊!
后来知道计算机是以字节为单位那么1024B的确是10位,这样的话,1B是几位?2的0次为1,难道是0位,不对吧!
如果只取1位,2的1次为2,难道说最小是2B?
到底是如何?求大神解释。。。
...全文
1503 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
uqwl_ 2014-07-20
  • 打赏
  • 举报
回复
虽然没有按位寻址,但是既然楼主问了,那我们就假设有吧。 最小寻址单位为字节(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的空间。 不知道这样楼主理解了没。。。
TheLostMan丶 2014-07-19
  • 打赏
  • 举报
回复
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跟地址总线 不知道你懂了没有 有兴趣的话可以看看 编码的奥秘
赵4老师 2014-07-18
  • 打赏
  • 举报
回复
引用 31 楼 xhw88398569 的回复:
引用 19 楼 zhao4zhong1 的回复:
据我所知:CPU都是按字节寻址,没有按位寻址的。
是按照机器字长寻址,然后再偏移吗?
《计算机组成原理》 地址总线、数据总线、RAM电路、……
Saleayas 2014-07-18
  • 打赏
  • 举报
回复
楼主在题目中已经确认 1B是8位,这是前提,怎么又成了问题了。
鼻涕虫de皮皮 2014-07-18
  • 打赏
  • 举报
回复
引用 19 楼 zhao4zhong1 的回复:
据我所知:CPU都是按字节寻址,没有按位寻址的。
是按照机器字长寻址,然后再偏移吗?
我看你有戏 2014-07-18
  • 打赏
  • 举报
回复
char 就是一个字节 1024个字节就是1KB 一字节8位 1024个字节 1024*8
鼻涕虫de皮皮 2014-07-18
  • 打赏
  • 举报
回复
引用 33 楼 zhao4zhong1 的回复:
引用 31 楼 xhw88398569 的回复:
[quote=引用 19 楼 zhao4zhong1 的回复:] 据我所知:CPU都是按字节寻址,没有按位寻址的。
是按照机器字长寻址,然后再偏移吗?
《计算机组成原理》 地址总线、数据总线、RAM电路、……[/quote]要学的太多了,刚学python,又要学C++,Web。。。还想学服务器。刚毕业,大学都学的硬件和c
xiaohuh421 2014-07-16
  • 打赏
  • 举报
回复
因为1字节即1Bytes = 8bit 即8位, 只能表示 0-255的数字即 0 - 0xFF 9bit能表示0-511 即 0x0 - 0x1FF 10bit能表示0-1023 即 0x0 - 0x3FF 所以10bit就能表示1KB了.
jmppok 2014-07-16
  • 打赏
  • 举报
回复
引用 28 楼 bbs2241 的回复:
你没搞清楚大B,小b。一般说的大B是指byte,小b是bit
1Byte = 8bit 1KB = 1024B = 1024*8 bit
妖怪 2014-07-15
  • 打赏
  • 举报
回复
1K是指的1024个bit 是一个存储空间的大小 因为1024 = 2^10 所以占10个位 和电脑是32位 64位没有任何关系
赵4老师 2014-07-15
  • 打赏
  • 举报
回复
#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

赵4老师 2014-07-15
  • 打赏
  • 举报
回复 1
据我所知:CPU都是按字节寻址,没有按位寻址的。
lied 2014-07-15
  • 打赏
  • 举报
回复
引用 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种情况)
layershow 2014-07-15
  • 打赏
  • 举报
回复
引用 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 根线能取回一个字节 你对这些概念都混淆了
lied 2014-07-15
  • 打赏
  • 举报
回复
引用 13 楼 zhao4zhong1 的回复:
B - Byte b - bit K - 1024
求大神对上面的问题解释下?
lied 2014-07-15
  • 打赏
  • 举报
回复
引用 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种情况)
lied 2014-07-15
  • 打赏
  • 举报
回复
引用 10 楼 ForestDB 的回复:
内存寻址时,是8个bit一起一次读出来的。
另外1KB=1024B=2的10次B,按字节寻址是10根? 那么同理1B=8bit=2的3次bit,如果按位寻址(不按字节),那么应该是3根就可以?但其实是8根吧?
赵4老师 2014-07-15
  • 打赏
  • 举报
回复
B - Byte b - bit K - 1024
bobo_包子 2014-07-15
  • 打赏
  • 举报
回复
你没搞清楚大B,小b。一般说的大B是指byte,小b是bit
lied 2014-07-15
  • 打赏
  • 举报
回复
引用 10 楼 ForestDB 的回复:
内存寻址时,是8个bit一起一次读出来的。
是不是32根线的任一一种状态就是1B?。只有 一根线的话可以确定2B?
加载更多回复(17)

70,014

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧