一个字节占用内存的一个地址10k个字节称为一个mb存储单元

32位内存中 一个内存单元所占的字节数_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
32位内存中 一个内存单元所占的字节数
32位的内存中,理论上每一个内存都是由0000000
32位的地址来组成的
第一个内存地址是0000000
第二个内存地址是0000001
这样来看的话,一个内存单元不是占4个字节吗?但是为什么...
我有更好的答案
先,占一个字节,四个字节;内存地址指向内存单元(可能1个或更多),32位系统每次读取的内存单元都是4个字节的偶数倍;32位是指地址长度,1个内存单元的长度是8bits
采纳率:75%
来自团队:
无类型地址累加1,内存偏移量为1个字节,无论是几位内存中都是一样的。地址只代表存储数据的地方--所处在内存的位置并不能表示地址所指向内存区域的数据是几个字节的。只有当使用的时候才能知道当前地址指向区域的内存大小。0000000
char a 1个字节0000001
int b 4个字节0000101
int c 4个字节0001001
short int d 2个字节0001010
char e 1个字节
寻址地址是根据你的CPU的地址总线来确定的,跟内存没多大关系至于8字节的内存单元是认为定义,是为了兼容性和编程实现考虑的
为您推荐:
其他类似问题
内存单元的相关知识
换一换
回答问题,赢新手礼包君,已阅读到文档的结尾了呢~~
最全的事业单位考试计算机基础知识试题,计算机一级考试试题,计算机二级考试试题,计算机中级考试试题,计算机等级考试试题,职称计算机考试试题,教师计算机考试试题,初中计算机考试试题,计算机考试试题,事业编制考试试题
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
最全的事业单位考试计算机基础知识试题
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口& 网友跟帖
以下网友评论只代表 软题库网友 个人观点,不代表软题库观点
网友最新跟帖
评论共 5 条
软题库学妮:
12:04:07 & 一、首先看到的是十六进制;
二、然后想到的是1个字节是8位,1k=1024个字节;
三、用后面的地址减去前面的地址。bfffh-a000h=2000h(16进制)=2*16*16*16(10进制)=/1024=8k. 软题库zhc46:
19:40:06 & (bffff-a000)+1=1fff+1
x16x16=8192
最后是8k 软题库gmj:
12:19:14 & 1fffh=1,11(2进制)=2的13次方-1=8191 软题库xdm1204:
10:52:28 & 1FFF0=1,11,)=65536
???? 软题库replay911:
10:05:27 & 1FFFH=)=8191(10)
共有:5条记录,每页20条,当前第1/1页,
&&发表评论&&
内容不能为空!&
请输入显示的内容在前面一节中简单介绍了的使用,当我们定义一个变量的时候,系统就会为变量分配一块存储空间。而变量的数值在内存中是以二进制的形式存储的,这讲来深入研究变量在内存中的一些存储细节。
一、字节和地址
为了更好地理解变量在内存中的存储细节,先来认识一下内存中的&字节&和&地址&。
1.计算机中的内存是以为单位的存储空间。内存的每一个字节都有一个唯一的编号,这个编号就称为地址。就好像酒店是以房间为单位的,每个房间都有一个唯一的房号,我们根据房号就能找到对应的房间。
里面的每个小框框就代表着内存中的一个字节,白色数字就是每个字节的地址(这里采取十六进制来显示,地址值是随便写的,仅作为参考,真实情况中的地址值不一定是这个),可以发现,内存中相邻字节的地址是连续的。
2.大家都知道,一个字节有8位,所能表示的数据范围是非常有限的,因此,范围较大的数据就要占用多个字节,也就是说,不同类型的数据所占用的字节数是不一样的。
二、变量的存储
1.变量类型的作用
跟其他编程语言一样,C语言中用来存储计算过程使用的值,任何变量都必须先定义类型再使用。为什么一定要先定义呢?因为变量的类型决定了变量占用的存储空间,所以定义变量类型,就是为了给该变量分配适当的存储空间,以便存放数据。比如char类型,它是用来存储一个字符的,一个字符的话只需要1个字节的存储空间, 因此系统就只会给char类型变量分配1个字节,没必要分配2个字节、3个字节乃至更多的存储空间。
2.变量占用多少存储空间
1& 一个变量所占用的存储空间,不仅跟变量类型有关,而且还跟编译器环境有关系。同一种类型的变量,在不同编译器环境下所占用的存储空间又是不一样的。我们都知道操作系统是有不同位数的,比如Win7有分32位、64位。由于我们是Mac 64位系统下开发,就以64位为标准。
2& 下面的表格描述了在64位环境下,基本数据类型所占用的存储空间,了解这些细节,对以后学习指针和数组时是很有帮助的。
3& 下面的表格描述了在不同设备环境下的存储空间占用情况
3.变量示例
当定义一个变量时,系统就会为这个变量分配一定的存储空间。
1 int main()
char a = 'A';
int b = 10;
1& 在64bit环境下,系统为变量a、b分别分配1个字节、4个字节的存储单元。也就是说:
变量b中的10是用4个字节来存储的,4个字节共32位,因此变量b在内存中的存储形式应该是00 00 。
变量a中的'A'是用1个字节来存储的,1个字节共8位,变量a在内存中的存储形式是,至于为什么'A'的二进制是这样呢,后面再讨论。
2& 上述变量a、b在内存中的存储情况大致如下表所示:
(注:"存储的内容"那一列的一个小格子就代表一个字节,"地址"那一列是指每个字节的地址)
从图中可以看出,变量b占用了内存地址从ffc1~ffc4的4个字节,变量a占用了内存地址为ffc5的1个字节。每个字节都有自己的地址,其实变量也有地址。变量存储单元的第一个字节的地址就是该变量的地址。变量a的地址是ffc5,变量b的地址是ffc1。
内存寻址是从大到小的,也就是说做什么事都会先从内存地址较大的字节开始,因此系统会优先分配地址值较大的字节给变量。由于是先定义变量a、后定义变量b,因此你会看到变量a的地址ffc5比变量b的地址ffc1大。
注意看表格中变量b存储的内容,变量b的二进制形式是:00 00 。由于内存寻址是从大到小的,所以是从内存地址最大的字节开始存储数据,存放顺序是ffc4 -& ffc3 -& ffc2 -& ffc1,所以把前面的都放在ffc2~ffc4中,最后面的八位放在ffc1中。
4.查看变量的内存地址
在调试过程中,我们经常会采取打印的方式查看变量的地址
1 #include &stdio.h&
3 int main()
int a = 10;
printf("变量a的地址是:%p", &a);
第6行中的&是一个地址运算符,&a表示取得变量a的地址。格式符%p是专门用来输出地址的。输出结果是:
变量a的地址是:0x7fff5fbff8f8
这个0x7fff5fbff8f8就是变量a的内存地址
三、负数的二进制形式
1 int main()
int b = -10;
在第3行定义了一个整型变量,它的值是-10。-10在内存中怎样存储的呢?其实任何数值在内存中都是以补码的形式存储的。
正数的补码与原码相同。比如9的原码和补码都是1001
负数的补码等于它正数的原码取反后再+1。(取反的意思就是0变1、1变0)
那么-10的补码计算过程如下:
1& 先算出10的二进制形式:00 00
2& 对10的二进制进行取反:
3& 对取反后的结果+1:
因此,整数-10在内存中的二进制形式是:
四、变量的作用域
1.作用域简介
变量的作用域就是指变量的作用范围。先来看看下面的程序:
1 int main()
int a = 7;
在第3行定义了一个变量a,当执行到这行代码时,系统就会为变量a分配存储空间
当main函数执行完毕,也就是执行完第5行代码了,变量a所占用的内存就会被系统自动回收
因此,变量a的作用范围是从定义它的那行开始,一直到它所在的大括号{}结束,也就是第3~6行,一旦离开这个范围,变量a就失效了
1& 代码块其实就是用大括号{}括住的一块代码。
1 int main()
int a = 10;
printf("a=%d", a);
注意第3~7行的大括号,这就是一个代码块
当执行到第4行时,系统会分配内存给变量a
当代码块执行完毕,也就是执行完第6行代码后,变量a所占用的内存就会被系统回收
因此,变量a的作用范围是从定义它的那行开始,一直到它所在的大括号{}结束,也就是第4~7行,离开这个范围,变量a就失效了
所以,上面的程序是编译失败的,第9行代码是错误的,变量a在第7行的时候已经失效了,不可能在第9行使用
2& 如果是下面这种情况
1 int main()
int a = 9;
int a = 10;
printf("a=%d", a);
注意第3、6行,各自定义了一个变量a,这种情况是没问题的。C语言规定:在不同作用域中允许有同名变量,系统会为它们分配不同的存储空间。
在第3行定义的变量a的作用域是:第3~12行;在第6行定义的变量a的作用域是:第6~9行。
最后注意第8行:尝试输出变量a的值。那这里输出的是哪一个变量a呢?先看输出结果:
这里采取的是&就近原则&,也就是第8行访问的是在第6行定义的变量a,并不是在第3行的变量a。
五、变量的初始化
变量在没有进行初始化之前,不要拿来使用,因为它里面存储的是一些垃圾数据
1 #include &stdio.h&
3 int main()
printf("%d", c);
注意第5行的变量c,只是定义了变量,并没有给它赋初值。输出结果:
可以发现,变量c里面存储的是一些乱七八糟的数据
阅读(...) 评论()这类题目分为两类:行优先和列优先(假设数组为A[n][m],数组下标从0开始)
1、行优先:基址+(行数)*m+列数)×每个元素所占内存单位
2、列优先:基址+(列数*m+行数)×每个元素所占内存单位,即1000+(5×6+5)×5=1175
先计算出A[5][5]是5*6+6=36,即A[5][5]是第36个数,从A[0][0]到A[5][5]是等差数列,共36个数,所以d36=d1+(36-1)*5=d1+36*5-5=1175
此题关键在于列优先,本来是一个6行7列的数组,应该看做7列6行,A[5][5]在第6列第6行
列优先,先算列值,数组总共是6行7列的元素
A[5,5]在第6行第6列
因为是列优先,先算列,一列元素有6个
因此 : 6*5 + 5 = 35
35*5 = 175
)*5,表示36个数吗,每个数5个字节,第36的一个数,所以起始地址还要减去5得1175
行优先和列优先(假设数组为A[m][n],数组下标从0开始)
1、行优先:基址+((行数-1)*m+(列数-1))×每个元素所占内存单位
2、列优先:基址+((列数-1)*n+(行数-1))×每个元素所占内存单位
拿此题来验证,A[0...5][0...6]的数组是6行7列,所以行数=6,列数=7
列优先:A[5][5] 中m=5,n=5 ;
= 1000 + ((7 - 1)*5 + (6 - 1))* 5 = 1175
本题主要注意点为列优先,所以不是按行储存,而是按列储存的,6行7列的数组,A[5,5]前面有5列,每列行数为6,在第6列的第6行,所以,在其前面的储存元素有5*6+5=35,其储存地址为:=1175
数组是6行7列的,但存是按列优先的,一列存6个,那么A[5][5]所在为第6行6列,前面有5列完整的,共30个元素,所求元素的所在列的前面有5个元素,所以共35个元素在前面,占175个字节
看清排列次序
才明白A[0..5][0..6]是一个6行7列的数组。。。
从0开始a[5.5]不应该是6*6+6嘛
+5)*5=1175
数组的表示:
数组A[L,U],其中L表示元素的下限,U表示元素的上限
数组A[0..5,0..6]表示就是该数组从第一行到第五行,即6行,同理,也有6列
这道题目要注意的是
列式存储。即是先按列存储。
还有,我没有看到题中有提示说是 6行7列的数组。这里要看懂A [0...5, 0...6]所要表达的意思。
0 1 2 3 4 5 6 1 2 3 4 5
@所在位置就是A[5,5],即(6*6-1)*5=175
列式存储。。。醉了。。。
数组A[0...5,0...6]表示的是什么呢?6行7列的数据吗》?还是5行6列呢
我选的A为啥还说我错了!
列存储,A[5,5]表示第六列第六个数,一列有5个数,所以应该是1000+5*(5*5+6)=1155. 为什么这么算不对,求解答
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
浙ICP备号-2
扫一扫,把题目装进口袋

我要回帖

更多关于 一个内存单元多少字节 的文章

 

随机推荐