学习C一段时间了,一些学习初期的遗留问题终于在不断实验和调试之后得到了答案,在恍然大悟和欣喜若狂之余,为防止知识的诅咒,赶紧提笔记录下来,希望给刚入门的朋友一些参考;如果有幸被前辈们看到这篇文章,也请多批评指正。

按照标题相反的顺序:
        1.计算机是由0和1组成的,一个(1/0)就是一个比特位,一个字节等于八比特,即1byte=8bit;

2.计算机的内存由内存单元组成,每个内存单元的大小为8bit,即一个字节;

3.如果给你32盏排成一排的灯,对应有32个开关由你掌控,你能玩出多少种不同亮灭的花样呢?根据排列组合,应该是2^32个;同理64盏灯应该 有2^64种花样;

4.关于16进制和2进制,16进制的一位数需要2进制的四位来表示;

5."int a=0x11223344;"这段代码表达的意思是:在内存中开辟了4个字节用来存放整形变量a,并给其赋值为一个16进制数:11223344,这个数转换成2进制的话应该是由8*4=32个0或1组成(由第4点可知),而32bit=4byte,即4个字节。

上述5点就是读这篇文章需要准备的全部知识了,因为是新手向的,所以字符、字、字长以及kb、mb等的换算之类的没有拓展,下面我们进入正题。

以32位机器为例,如果有32根地址线,每根地址线能产生(1/0)的电信号,那么32根地址线所产生的地址如下图黄色区域:(类比上述第3点)

这样一来,我们就有了2^32个内存单元,并且每个单元都有了与之对应的唯一编号,也就是我们常说的地址(2进制);而在编译软件中(以Visual Studio 2022为例)这些编号是以16进制的数表示的,我们刚说16进制的一位数需要2进制的四位来表示(上述第4点),那么我们可以推断:

1.地址:这32个0或1(2进制)在编译器里应该是8位的16进制数

2.内存单元:8bit即8个0或1(2进制)由16进制数表示应该是2位

而事实证明的确如此。以这段代码为例:

#include <stdio.h>int main()
{int a = 0x11223344;int* pa = &a;return 0;
}

F10调试让代码跑起来,从窗口中打开内存和监视:

我们可以看到a这个变量的值的的确确被放进了一个以编号为"0x001DFEA0"为首的四个字节里面了,没错我说的是为首,这一点需要注意。我们的继续看,如果我们用下面一行的内存单元编号"001DFECB"减去"0x001DFEA0"会得到什么呢?

答案是43(10进制),这时候如果你还没有眼花并且也很清醒的话,你数一下调试界面那张图内存每一行字节的个数,的的确确就是43个。

当我走到这一步的时候,我深刻理解到了醍醐灌顶的滋味,一口气写下这篇文章,感觉天晴了,花香了,虽然我知道我了解的这些只是一些皮毛,但的确是困扰了我很久的问题,我之前以为内存单元里放了32个0(误 ,这也是我写的第一篇文章,希望能给你带来一些帮助。

关于32位和64位、地址线、内存单元、字节等知识汇总相关推荐

  1. [置顶] 第十七章——配置SQLServer(2)——32位和64位系统中的内存配置

    前言: 本文讲述32位和64位系统中的内存配置,在SQLServer 2005/2008中,DBA们往往尝试开启AWE来限制内存.但是,在SQLServer2012以后,这个选项将被弃用,所以不能使用 ...

  2. 单片机8位、16位、32位和64位系统在内存上的区别

    总线.内存和变量的相关知识 前言 本篇文章主要介绍单片机内部的总线和内存的一些关系及知识点, 一.32位系统和64位系统的区别 1. 8位.16位.32位和64位CPU的含义 如标题所述,不同位数的单 ...

  3. 微信计算机内存是32位吗?,windows7旗舰版32位和64位的区别是什么

    大部分朋友电脑还是安装win7的系统,如果你是大于4gb内存的用户就要了解一下你电脑系统是多少位的了,小编建议如果你大于4gb最好都安装window 64位,因为这样运行会比较通畅.很多朋友问小编wi ...

  4. linux 32位和64位的区别 内存,32位、64位的区别

    如果你的"支持64位"指支持64位的可执行文件或者"支持64位内存寻址",那么很显然,一个32位的操作系统无法支持64位的可执行文件,由于硬件的限制也不支持64 ...

  5. 32位dll注入到64位程序_你用的32位还是64位?有什么区别呢?

    (给程序员零距离加星标,了解项目开发.) 粉丝福利:小编会从今天留言中抽选3名小伙伴赠送现金红包,感谢大家一直以来的支持!文末见喽!通过前面两篇文章的学习,外甥对电脑的产生了各种好奇,差点把自己电脑拆 ...

  6. 从编程角度看32位和64位

    ------------------------文章内容并非原创,看其他博主,有所收获,积累一二---------------------------------- 一)64位系统和32位有什么区别? ...

  7. 计算机CPU指令的32位、64位是如何区分呢?

    计算机CPU指令的32位.64位是如何区分呢? 浏览次数:812次 2011-1-3 11:51 提问者:wu123st 非常专业的一个问题.因为看到文章介绍了CPU有32和64位,就想知道这个位数是 ...

  8. 电脑系统32位和64位有哪些区别?32位和64位是什么意思 ?

    我们在安装系统的时候,需要了解的东西太多了,比如选择系统的话你首先要了解是选择32位还是64位系统呢?然后还需要判断电脑适合32位还是64位系统?这些问题要折腾清楚之后才能更好的进行安装,今天带大家了 ...

  9. linux c va_list 32位和64位的差异

    在将程序从32位机器移植到64位机器的过程中经常出现一些奇奇怪怪的错误,这里记录一下在使用可变参数的过程中导致在32位机器上正常运行的程序移植到64位机器上之后出现段错误的发现过程以及解决方案. 首先 ...

  10. C++ 32位和64位

    C++32位和64位程序的区别 原文地址: https://blog.csdn.net/nma_123456/article/details/45077345 由于操作系统内存分配的不同,导致软件开发 ...

最新文章

  1. android keytool 不是内部命令或外部命令在 (win7下不能用的解决方法)
  2. [Javascipt] Immediately-Invoker 2
  3. 所罗门王之梦(程序员羊皮卷读书笔记)
  4. const_cast的应用
  5. java蓝桥暑假班_Java实现 蓝桥杯VIP 算法提高 班级排名
  6. 转SFTP 和FTPS的区别是什么?
  7. mimo-ofdm无线通信技术及matlab实现_无线通信模块有哪些?它们有什么区别?
  8. LTE学习:CCE(2)
  9. 《人人都该买保险》读书笔记
  10. 解决websocket链接失败防火墙规则问题
  11. WebRoot与WebContent区别
  12. GIT:cherry-pick挑拣提交
  13. 英皇考级——听力测试的训练方法
  14. 科研第二步:远程在服务器上跑程序jupyter使用
  15. 全 3D 社交网络 Beloola 测试视频
  16. android文件上传413 nginx [error] 9679#0: *318855 client intended to send too large body: 1593409 bytes
  17. java uninstall tool_java卸载工具|java卸载工具(JavaUninstallTool)下载v1.1.0.0 - 欧普软件下载...
  18. optix资料(基于optix7.0)——错误
  19. python参数化建模加工图_基于Python的ABAQUS层压板参数化建模
  20. 朗朗上口的穴位歌!收藏了,很难找到!

热门文章

  1. Android打开相册vs拍照获取图片的原理实现
  2. 高德地图车机版缩放版_高德地图车机版4.0解析:看不见的升级才是重点
  3. [NOIP2008] 火柴棒等式
  4. 决心为社会贡献一点绵薄之力,特此决定在网上发表博客,贡大家参考学习
  5. IOT 赋能旅行场景的实践与展望
  6. php判断某日期是哪一年的第几周
  7. 华硕笔记本FL8000u拆机后不能电池开机
  8. 使用SQLyog远程连接MySQL数据库
  9. 1000桶酒中含两桶毒酒问题
  10. 小红书怎么看人气榜单?2月第1周千瓜小红书数据分析