精华内容
下载资源
问答
  • 字节与地址的关系
    千次阅读
    更多相关内容
  • C++中指针、地址、内存与字节关系

    千次阅读 多人点赞 2021-08-21 15:16:15
    想必大家在刚开始学习C++时,经常会听到指针、地址、内存与字节的概念,但对于初学者,一个指针就理解的磕磕盼盼,很难分清上面几个概念的区别。下面给各位C++小萌新分享一下我对这几个概念的理解,可能不够专业,但...

            想必大家在刚开始学习C++时,经常会听到指针、地址、内存与字节的概念,但对于初学者,一个指针就理解的磕磕盼盼,很难分清上面几个概念的区别。下面给各位C++小萌新分享一下我对这几个概念的理解,可能不够专业,但一定能够帮助你对这几个概念的理解。 

    1、字节

     大家在学刚学习C++时,一定见过这样的图表

    数据类型占用空间
    short(短整型)2字节
    int(整型)4字节
    long(长整型)4字节
    long long (长长整型)8字节
    float  (单精度)4字节
    double (双精度)8字节
    char (字符型)1字节
    bool    (逻辑型)1字节

    这里几字节到底代表什么?就以最常见的int型(4字节)来举例

            我们知道1字节=8bit,而计算机本身只能识别1与0且这种1与0就存储在bit中,那它是如何存储整数1314这种数据呢?实际上,1bit里面只能存储单个1或0并没有多大的意义,但是4字节共有32bit,这时候0与1的组合种类达到2^32种,其中每一种组合都代表一个数字,显而易见最多能代表的数字范围为-2^31~2^31-1。

            所以,整数1314这串数字在计算机中的表达相当于一连串的文件袋,1字节的意义就相当于一个箱子,而整数1314的文件袋比较多需要四个箱子才能装得下,有的数据如字符"A"文件袋就比较少只需要一个箱子即可。

    2、内存

            这个就很简单了,箱子统称为内存,箱子的多少代表内存的大小。内存与字节的关系就相当于质量与kg的关系。

     3、地址

            上面说到1字节相当于一个箱子,一个大小为1KB的内存空间里有2^10个箱子,这么多箱子它在内存空间里是有序还是无序的?想必大家即使没学过计算机基本知识也能知道这么多箱子必然是有序的。那么如何实现有序呢?最简单的就是我们给每个箱子都编号,这编号是啥?其实这编号就是我们所说的地址,它能准确的告诉计算机某个箱子的位置。

            这时候一些小伙伴可能就要问了,为啥我返回某个int型变量的地址,它只返回一个地址,按理来说int型变量的存储需要四个箱子,所以计算机应该告诉我这四个箱子的编号,即返回四个地址。当你有这样的问题时,就代表你离理解它的距离很接近了。确实真正存储int型变量的箱子为四个,但我们约定俗成,规定返回int型变量地址时只需要返回四个箱子中第一个箱子的编号即首地址即可。 

            所以我们所说的地址有两个内容,首先是对于字节即箱子,地址是箱子的编号,即一个地址与1字节一一对应。其次是对于变量,我们所说的变量地址,实际上是存储变量所需n个箱子中第一个箱子的编号,即n个字节的首地址。

    4、指针

            终于说到让无数C++学子魂牵梦绕的指针。指针到底是啥?我们首先来创建个指针然后将其直接打印。

    	int num=1314;
    	int *p=#
    	cout<<"num地址:"<<&num<<endl;
    	cout<<"指针p: "<<p<<endl;

     从打印结果我们发现p=&num,于是我们得出结论,指针就是地址。得出这样的结论只能说对了一半,我们接着实验继续往后看。

    	int num=1314;
    	int *p=&num;
    	cout<<"num地址:"<<&num<<endl;
    	cout<<"指针p: "<<p<<endl;
    	cout<<"解指针p: "<<*p<<endl;

     通过解指针p我们很容易获得指针指向的变量num的值1314。如果指针只是一个地址,那我们能否都通过设置另外一种类型指针p2,将地址设为与p相同,最后通过解指针p2获得num的值呢?

    	int num=1314;
    	int *p=&num;
    	cout<<"num地址:"<<&num<<endl;
    	cout<<"指针p: "<<p<<endl;
    	cout<<"解指针p: "<<*p<<endl;
    	double *p2;
    	p2=(double*)p;
    	cout<<"指针p2: "<<p2<<endl;
    	cout<<"解指针p2: "<<*p2<<endl;

             通过结果我们可知,即使p与p2的地址相同,p2解出来的结果却明显不是我们想要的。由此可知指针并不是单纯的一个地址,即使显示出来为一个地址。实际上指针还有一个隐藏属性偏移量,偏移量是啥?偏移量实际上就是就是告诉系统解指针的时候要往后数多少个箱子。int* p是往后数四个箱子,而double* p2是往后数8个箱子。那么偏移量由什么来确定呢?很显然其是由定义指针时的数据类型存储所需要的箱子数决定的。在解指针获得变量的值时,需要根据地址与偏移量再解释成对应的数据类型。

            我们再创建个指针int* p3,将p2中地址赋值给它,再解指针时看能不能正确获得num的值。

    	int num=1314;
    	int *p=&num;
    	cout<<"num地址:"<<&num<<endl;
    	cout<<"指针p: "<<p<<endl;
    	cout<<"解指针p: "<<*p<<endl;
    	double *p2;
    	p2=(double*)p;
    	cout<<"指针p2: "<<p2<<endl;
    	cout<<"解指针p2: "<<*p2<<endl;
    	int* p3;
    	p3=(int*)p2;
    	cout<<"指针p3: "<<p3<<endl;
    	cout<<"解指针p3: "<<*p3<<endl;

     从结果来看p3可以正确获得num的值。

            归纳一下,指针是地址与偏移量两种属性的结合体。其中地址与变量地址相同,偏移量由定义指针时的数据类型决定,偏移量大小为对应数据类型存储所需字节数多少。在解指针获得指针所指向变量的值时,先根据指针的地址属性确定首地址,再根据指针的偏移量属性确定往后读取多少个字节,最后系统根据指针类型解释成对应类型的数据。

    如有错误的地方欢迎指正交流。

    展开全文
  • 完全搞懂ip地址之前我们首先要知道二进制十进制的关系,那么什么是二进制呢?我们知道电脑在进行数据传输的时候只能传输二进制比特流,并且二进制只能用0和1进行表示。比如一个数字“10”,电脑在进行传输的时候就...

    一、什么是二进制与十进制?

    完全搞懂ip地址之前我们首先要知道二进制与十进制的关系,那么什么是二进制呢?

    我们知道电脑在进行数据传输的时候只能传输二进制比特流,并且二进制只能用0和1进行表示。

    比如一个数字“10”,电脑在进行传输的时候就转化成二进制比特流“1010”进行传递,可以看到“1010”不便于人的理解,所以引出了十进制。

    那么十进制数如何转换成二进制数呢?

    举个例子:十进制数29如何转换成二进制
    把给定的十进制数29除以2,商为14,所得的余数1是二进制数的最低位的数码

    再将14除以2,商为7,余数为0

    再将7除以2,商为3,余数为1

    再将3除以2,商为1,余数为1

    再将1除以2,商为0,余数为1

    是二进制数的最高位的数码。具体过程如下

    73594526-b012-eb11-8da9-e4434bdf6706.png

    所以十进制数29转换成二进制等于:11101

    关于单位的转换

    比特作为传输的概念

    字节作为存储的概念

    bit(比特)
    bit也就是我们不一定听说过的比特,大名鼎鼎的比特币就是以此命名的。它的简写为小写字母 “b” 。
    作为信息技术的最基本存储单元,因为比特实在太小了,所以大家生活中并不是经常听到。那么 bit 是什么呢?
    电脑是以二进制存储以及发送接收数据的。二进制的一位,就叫做 1 bit。也就是说 bit 的含义就是二进制数中的一个数位,即 “0” 或者 "1"。

    Byte(字节)
    Byte 是字节的英文写法。它的简写为大写字母 “B"。
    既然名字叫字节,那肯定跟字符有关系。是的。英文字符通常是一个字节,也就是 1B,中文字符通常是两个字节,也就是 2B。
    字节 Byte 和比特 bit 的换算关系是 1 Byte = 8 bit 。

    存储单位换算
    1 Byte = 8 bit
    1 KB= 1024 B
    1 MB = 1024 KB
    1 GB = 1024 MB
    1 TB = 1024 GB

    二、什么是ip地址?

    首先明白一点,我们访问的所有的网站,例如jd.com,baidu.com等等网站,最终访问的都是一个ip地址,而baidu.com这些东西都叫做域名,域名的产生是因为ip地址不容易使人记住,而造成了域名的产生,便于人的记忆。

    补充:DNS是将域名解析成ip地址的东西,以供访问。

    那么说我们通讯双方在进行通讯的时候,一定要有两个ip地址,一个叫做源ip地址,一个叫做目的ip地址。有了目的ip地址我们就知道把数据发给谁,而对方通过源ip地址对我们进行回复。

    Ip地址就像手机号一样,手机号标识着一个人,而ip地址标识着网络中的一台设备。

    三、IP地址格式和表示

    IP地址由32位二进制数组成,分为4段(4个字节),每一段为8位二进制数(1个字节)
    每一段8位二进制,中间使用英文的标点符号“.”隔开

    由于二进制数太长,为了便于记忆和识别,把每一段8位二进制数转成十进制,大小为0至255
    IP地址的这种表示法叫做“点分十进制表示法”。
    IP地址表示为:http://xxx.xxx.xxx.xxx
    举个栗子:210.21.196.6就是一个IP地址的表示。

    四、ip地址的组成

    最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码,即网络位和主机位。

    网络位:标识了一个ip地址所属网段

    主机位:代表了一个网段内唯一的一台设备

    既然我们说了一个ip地址由网络位和主机位进行划分,那么由谁来划分呢?

    这时候就引入了一个新的名词,叫做子网掩码。

    Ip地址要和子网掩码进行结合才能标识其所在的范围,掩码跟IP地址一样也是32 bits,用点分十进制表示。IP地址网络部分对应的掩码部分全为“1”,主机部分对应的掩码全为“0”。

    举个例子

    Ip地址:192.168.1.2

    掩 码:255.255.255.0

    换算成二进制

    Ip地址:11000000.10101000.00000000.00000010

    掩 码:11111111.11111111.11111111.00000000

    缺省状态下,如果没有进行子网划分,A类网络的子网掩码为255.0.0.0,B类网络的子网掩码为255.255.0.0,C类网络的子网掩码为255.255.255.0...合理的利用子网掩码,网络地址的使用会更加有效.。

    每个网段中第一个地址不能用,它的作用是标识着这个网段比如192.168.1.0

    每个网段最后一个地址不能用,它代表这这个网段的广播地址

    五、ip地址的分类

    每类ip地址都有一个缺省的子网掩码,按照缺省的子网掩码可将ip地址分为A B C三大类。而A类B类C类这种网络也叫做有类网络划分。

    A类地址:1.0.0.0~126.255.255.255 网络位:255.0.0.0 可用主机数:2的24次方个

    B类地址:128.0.0.0~191.255.255.255网络位:255.255.0.0可用主机数:2的16次方个

    C类地址:192.0.0.0~223.255.255.255网络位255.255.255.0可用主机数:2的8次方个

    D类地址:224.0.0.0~239.255.255.255 组播地址 不分网络位和主机位

    E类地址:240.0.0.0~255.255.255.255 用于科研 不分网络地址和主机地址

    特殊地址:0.0.0.0 ①缺省,代表所有;②无效,没有地址;

    127.x.x.x本地回环地址;

    169.254.0.0/16 PC通过DHCP没有请求到地址时自行分配的地址

    有类网络划分的缺陷

    76594526-b012-eb11-8da9-e4434bdf6706.png

    如果企业网络中希望通过规划多个网段来隔离物理网络上的主机,使用缺省子网掩码就会存在一定的局限性。网络中划分多个网段后,每个网段中的实际主机数量可能很有限,导致很多地址未被使用。如图所示的场景下,如果使用缺省子网掩码的编址方案,则地址使用率很低。所以说合理的利用子网掩码划分网段,确保了网络中ip地址的高利用程度,减少浪费。

    六、ip地址的类型

    全球现有的IPv4地址一共有2的32次方个,估算约为42.9亿个,除去一些特用的IP和一些不能用的IP,剩下可用的不到40亿。因为科技的发展,网络的普遍化,产生了ip地址不够用的问题,为了解决这个问题产生了私网地址和公网地址。

    私网地址: 可以重复使用,通过互联网是不能访问私有IP的,私网地址可以访问公网

    公网地址:全球唯一,是在互联网上使用的,在任何地方只有能连网都能访问公网IP

    展开全文
  • 字节数据和地址之间的关系

    万次阅读 2018-09-03 18:33:56
    字节 (byte) 习惯用B来表示 1byte=8bit 地址值 :变量占用空间的起始地址地址值由分配时决定,之后不再改变直到变量撤销。地址值是一个常量 int a; int *p=&amp;a; a=1 &amp;a=0x23 int * ...

    位 (bit)    比特  最小的存储单位

    字节  (byte)    习惯用B来表示   1byte=8bit

    地址值 :变量占用空间的起始地址,地址值由分配时决定,之后不再改变直到变量撤销。地址值是一个常量

    int   a;     int   *p=&a;   a=1  &a=0x23      int  *   是一种地址类型    p=0x23   *p=1 

    当 一个全局变量放在头文件中被多个.c文件引用时,编译不会有错,但会导致“符号被多重定义",需要加上static使其变为内部链接,将其变为多个同名不同义的定义

    union 中各成员占用的内存从同一地址开始,占用的大小可能是最大的变量类型长度  被称为 "共同体"     成员中含有long 和double  长度为8,long和float 长度为4     。。。

    malloc 和free一同使用,malloc分配空间,free释放空间        dest=malloc(..)    free(dest) //防止产生内存泄漏     dest=NULL //防止产生野指针

    stack  栈   空间有限 由系统统一分配    在编译期对变量和函数的分配内存都在栈上进行       

    heap  堆   malloc函数手动分配  地址大      

    int  * const p    地址为常量  地址内容可变       int   const *p   和   const   int   *p    相同,都是地址内容不可变,地址可变    区别在于const 修饰的是地址还是内容

    int a[5]={0}  &a+1 是地址上再加20,而a+1是加4       a是数组的首地址是&a[0]  而&a是代表整个数组长度

    被volatile 修饰的变量表示会被意想不到的改变,所以每次使用这个变量的时候都会重新取值,而不是使用备份。通常是多个线程共用的变量    状态寄存器    

     

    展开全文
  • 前天我们发布如何判断两个IP地址是否在同一个网段?什么是子网掩码?,有朋友反映有没有更基础的,那我们就从ip地址换算开始说起。一、特殊的IP地址1、0.0.0.0严格说来,这个奇葩的地址0.0.0.0已经不是一个真正意义...
  • 1、字节与内存的关系字节byte是cpu处理字长能力的一个单位。内存memory address是cpu在寻址过程中能够访问到的物理或者逻辑内存的位置。在C++中,字节作为单位,可以数量化表示内存地址的值。字节是内存容量单位。...
  • 字节与内存的关系

    千次阅读 2019-06-11 15:12:21
    1个字节=2个16进制数 内存地址是8位16进制表示,占4字节 00423020 00423030 中间相差16个字节 1位内存地址存1个字节
  • bit ( 比特 )和 Byte(字节)的关系

    千次阅读 2021-12-15 11:14:43
    bit ( 比特 )和 Byte(字节)的关系? 一.存储单位的bit 和 Byte 1.bit(比特) bit也就是我们不一定听说过的比特,大名鼎鼎的比特币就是以此命名的。它的简写为小写字母 “b” 。 作为信息技术的最基本存储单元,...
  • 小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处; 大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。 高、低字节 一般PC是低字节序,如果按平时书写习惯,从左到右是...
  • 位、字节、字之间的关系

    千次阅读 2022-02-17 17:08:36
    位(bit):简单来说一位就是一个二进制数 官方一点:数据存储的最小单位。在计算机中的二进制数系统中,位,简记为b,也称为比特...最早的拼写方式是bite,但是为了避免bit混淆用y代替了i。到20世纪60年代中叶,在IB
  • 字节地址和位地址有什么区别

    万次阅读 多人点赞 2018-06-08 10:17:00
    位地址就是每一个位的地址,8位一个字节,如果把字节比为一个8位的数组的话,字节地址就是这个数组的首地址,具体区别如下。 字节地址和位地址的区别: 一、位地址是字节地址中的某一位,在RAM 中,位地址20H是...
  • 字和字节和位的关系

    万次阅读 2019-07-07 17:27:40
    1、位(bit) 来自英文bit,音译为“比特”,表示二进制位。位是计算机内部数据储存的最小单位,11010100是一个8位二进制数。一个二进制位只可以表示0和1两种状态(21);...字节是计算机中数据处理的基本单...
  • 操作系统位数数据字节数的关系

    千次阅读 2018-09-21 21:36:45
    各类型的数据长度是由编译器决定的: 发现 数据类型占内存的位数实际上操作系统的位数和编译器(不同编译器支持的位数可能有所不同)都有关,具体某种数据类型占字节数得编译器根据操作系统位数两者之间进行协调...
  • 上图中括号括起来的两行就是字,一个字通常由多个字节组成,通常说的64位CPU字是8个字节,32位CPU字是4个字节,它是计算机进行数据处理时,一次存取、加工和传送的数据长度称为字。 字长: 又称作“机器字长”,...
  • 字节&字&双字地址的区别

    千次阅读 2020-07-16 10:00:31
    字节:一个字节等于8位,[7:0]。 字:相邻的两字节组成一个字,表示一个无符号数,字为16位,[15:0]。 双字:相邻的两个字组成一个双字,可以表示一个无符号数,双字为32位,[31:0]。
  • 位、字节地址

    千次阅读 2009-09-14 16:55:19
    位地址是字节地址中的某一位,在RAM 中,位地址20H是字节地址24H的最低位,字节地址20H有8个位地址:从00H---07H,所以在用汇编去编程的时候,需要注意操作的地址是位地址还是字节地址,把数据存放在含有位地址的...
  • 字节比特相关单位换算,主存,存储容量,主存中存储单元地址的分配,高位字节,低位字节,高地址,低地址,大端序,小端序,字地址,寻址范围
  • 位,字节,字关系

    万次阅读 多人点赞 2018-04-10 21:51:35
    位(bit):简单来说一位就是一个二进制数 官方一点:数据存储的最小单位。在计算机中的二进制数系统中,位,...字节:简单来说就是8个二进制数,即8 bit 就称为一个字节(Byte) 字节这个词最早起源于1956年前...
  • 在内存中存储时,由于内存单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存单元来存放。比如我们从0地址开始存放20000,图示: 上图中,我们用0、1两个内存单元存放数据20000(4E20H),0...
  • 位、字节、字(bits, Bytes, words)是计算机数据存储的单位。位是最小的存储单位,每一个位存储一个1位的二进制码(0 or 1),一个字节由8位(8个二进制0 or 1 串)组成。而字通常为16、32或64个位组成。 位 位是最...
  • 大端(高位在低地址)机器小端(低位在低地址)机器: 这两个概念说的是机器如果理解内存中的数据,比如一个4字节的整型数值0x01020304,在机器内存中地址从低到高有4个字节数据排列如下: 大端机器...
  • 一般一个16位(双字节)的数据,比如 FF1A(16进制) 那么高位字节就是FF,低位是1A 如果是32位的数据,比如3F68415B 高位字(不是字节)是3F68 低位字是415B 右边是低位位,左边是高位 C语言中的高位字节和...
  • 字节、字、位、比特的概念和关系

    万次阅读 多人点赞 2018-11-28 09:45:20
    1、位(bit) 来自英文bit,音译为“比特”,表示二进制位。位是计算机内部数据储存的最小单位,11010100是一个8位二进制数。一个二进制位只可以表示0和1两种状态(21);...字节是计算机中数据处理的基本单...
  • 在计算机中要访问存储区,都是通过地址来进行访问的,包括所有的外设(比如串口、内存、硬盘等),都对应有一个访问地址,内存中的每一个字节对应唯一的一个地址,每一个地址代表一个字节
  • 只要知道了,按字节编址按字长编址的区别就可以解决这些疑问了。下面将用按字节编址按字编址的电路原理图图解来讲述其中的奥秘。首先,32 位/64 位 CPU 指的是 CPU 的数据总线的宽度,也是字长。...
  • 不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序 ...网络字节序用的是big endian方式,即如果一个ip地址为 127.0.0.1,则表示为uint32位网络字节序时为 127*pow(256,3)+0*pow(256,2
  • 寄存器地址和寄存器位之间的关系? 答:在汇编语言中,分为位地址和字地址,8位为一个字地址,题中32位即4个字地址,10个寄存器为40个地址
  • plc位、字节、字、双字的关系

    千次阅读 2020-12-24 09:53:49
    (2)字节:每8个位组成一个字节。这样一个字节可以表达2的8次方(256)个状态,大于256个状态怎么表示?那就字。(3)字:2个字节组成一个字,有16个位。这样一个字可以表达2的16次方(65536)个状态,大于65536个状态怎么...
  • 地址线和数据线(为什么用字节来计量存储容量)

    万次阅读 多人点赞 2016-05-04 16:47:19
    咱们先看百度百科对地址线的解释:  地址线是用来传输地址信息用的。举个简单的例子:cpu在内存或硬盘里面寻找一个数据时,先通过地址线找到地址,然后再通过数据线将数据取出来。 如果有32根.就可以访问2的32次方...
  • 一、作用不同:字节寻址:把数据直接写入当前地址,或者把当前地址的内容读出。位寻址是位操作命令,写入和读出的是一个位bit变量。二、传递不同:MOV A,00H和MOV C,00H,前者是将RAM中地址为00H的8位内容传递给A,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 357,892
精华内容 143,156
关键字:

字节与地址的关系