当前位置:首页 » 编程语言 » c语言中字节怎么计算

c语言中字节怎么计算

发布时间: 2022-10-30 10:42:08

㈠ 急!c语言中字符与字节怎么算

字符是C语言中的一个术语,字节是内存大小的一个单位;字符占用内存空间的一个字节;/0是一个字符。

㈡ C语言中,字节数怎样算

\xff是转义0xff,这个内容是2字节。
如果作为字符串,还要有个0x0作结束符,实际需要占用的内存是3字节。

㈢ 我搞不懂C语言里的字节怎么算

一个字节是8bit 32位 char是1字节 short2字节 int4字节 double8字节

㈣ c语言怎样计算所占字节

主要是看变量定义的类型;
char占一个字节,int占四个字节,float占四个字节,double占8个字节;
当要注意的是在字符串中要加个'\0',要多算一个字节。

㈤ c语言十六进制字节计算

在vc中int是占4个字节
所以3个int
占12个
在tc中int占2个字节
就占6个
一般书上说的都是int
2字节,long
int
4字节,
vc
中int

long
int
都是4字节

㈥ 急!C语言中字符与字节怎么算

一个英文字符占用一个字节(byte)的内存,\0是一个字符。一个字节等于8位(bit)。

㈦ C语言中结构体字节的计算方式

  在说计算方式之前先讲讲几个概念一个是 偏移量 还有一个是 内存对齐 。先说偏移量,网络对于它的定义是这样:把存储单元的实际地址与其所在段的段地址之间的距离称为段内偏移,也称为“有效地址或偏移量”。在结构体里面大概是指结构体变量中成员的地址和结构体变量地址的差。然后再说一下内存对齐这个概念:内存中存放基本类型数据时,计算机的系统会对其位置有限制,系统会要求这些数据的首地址的值是某个数的倍数,而这个数被称为该数据类型的对齐模数。虽然ANSI C标准中没有强制规定相邻声明的变量内存中要相邻,但是编译器会自动帮你处理这个问题,也就是相邻变量之间可能会填充一些字节。因此在这个问题上又有了编译器的区别。

  那我们先来讲讲结构体变量在微软的编译器的对齐吧

      1.结构成员的首地址要是其最宽的基本类型成员的整数倍。编译器在给结构体分配内存的时候先找到最宽的基本成员,然后再在内存中寻找地址,并将这个最宽的基本数据类型的大小作为对齐模数

       2.结构体每一个成员相对于首地址的偏移量是成员大小的整数倍,如果没有达到这个要求,编译器会自动填加字节。编译器在为结构体成员开辟内存的时候会先检查开辟内存的首地址与结构体变量的首地址之间的偏移量,如果是成员体的整数倍那么就存放这个变量,不然的话就在这个成员和上一个成员之间填充字节,以达到整数倍的目的

       3.结构体所占的总内存大小要是最大成员体大小的整数倍,如果不是,那么编译器会在末尾补充字节。结构体的最后一个成员,不仅要满足前两条原则,最后一条准则也要满足。

      接下来来看看几个例子。

这个结构体在VS 2017下的sizeof的运算结果是12。那么根据上面的对其规则我们来对其进行计算。

首先是char a。char大小是1,相对于首地址的偏移量是0,然后是int i。int i的大小是4,相对于首地址的偏移量是1,但是1不是4的整数倍,所以编译器会自动在char a和int i之间填充字节字节。所以in i的偏移量是4。而之后的float b大小4偏移量就是int i的偏移量加上int i的大小故float b的偏移量大小就是8,而8正好是4的倍数那么就不会有字节填充。而结构体的大小也就自然是最后8+4=12了

从这里也可以看出结构体大小等于最后一个成员体的大小加上它的偏移量。

那么我们再来看一个例子

那么我们再利用之前的算法来对其进行运算,int i的大小是4偏移量是0,int c 的大小是4偏移量是4,double b的大小是8,偏移量是8。char a的大小是1 ,偏移量是16。那么这个结构体的变量的大小就是16+1=17吗?答案肯定不是这样的。在VS的sizeof的运算下这个的结果是24,为什是24呢,那么这之前说的最后一条原则就要用上了。结构体的大小确实是等于最后一个成员的偏移量加上最后一个成员的大小,但是如果这个结构不满足是结构体中最大成员大小的整数倍这个条件那么,编译器会自动在最后填充字节使其满足,也就是说,虽然我们计算出的结果是17但是17并不是8的倍数,所以编译器自动在最后填充字节使其成为8的倍数,即自动扩充成24.、

那我们再来说一下GCC编译器下的模式。GCC编译器在Windows环境下用的会比较少,主要在Linux平台下使用GCC编译器就不遵守微软的编译器下的一些准则了,比如之前 说过的对齐模数。微软的编译器下的对齐模数是结构体成员中最大的大小而在GCC编译器下对齐模数最大只能是4。这就意味着对齐模数只能是1,2,4中的一个。因此之前讲过的在微软编译器下的的一些原则会有些不同。之前讲过的成员的首地址的偏移量要是成员大小的整数倍在这里就有点区别了。在GCC中如果成员大小小于等数4那么继续按照之前的标准就好了,但如果大于4,则结构体每个成员相对于结构体首地址的偏移量只能按照是4的整数倍来进行判断是否添加填充。来看一个简单的例子。

在这个例子中,如果是按照微软的编译器的话计算的结构应该是16,但是在GCC编译器下是12。道理就是之前讲的。

  虽然理论上如此但是我自己在试的时候发现上面的运算结果是16,没错是16而不是12!为什么呢?难道是这个理论错了么,当然不是。我们可以尝试在GCC下计算一下sizeof(int *)(是int *而不是int)。你会发现结果是8(如果是sizeof(int)那么结果结果就是4),输出结果是8那就解决了我们的疑惑。 64位系统的对其长度默认是8而32位的才是4 。这就合理解释了为什么计算结果是16而不是12。

对齐模数的选择只能是基于基本数据类型,所以对于结构体嵌套结构体就不能这么,至于其的计算方式之后再补充

㈧ C语言中,如何计算有多少个字节

27个,可以用strlen()函数来求(函数包含在string.h头文件中)

㈨ C语言结构体所占用的字节数如何计算

结构体的数据类型的有点多我们就不啰嗦了,直接来看相同数据结构体的几种书写的格式吧。

格式一:

01.structtagPhone
02.{
03.charA;
04.intB;
05.shortC;
06.}Phone;

格式二:

01.structtagPhone
02.{
03.charA;
04.shortC;
05.intB;
06.}Phone2;

格式三:

01.structtagPhone3
02.{
03.charA;
04.charB[2];
05.charC[4];
06.}Phone3;


我们都知道,char类型占用1个字节,int型占用4个字节,short类型占用2个字节,long占用8个,double占用16个;

那么我们可能会犯一个错误就是直接1+4+2=7,该结构体占用7个字节。这是错的。

以下我们简单分析下:

计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取决于结构体中最大基本类型的大小。

对格式一:

上面结构计算大小,sizeof(Phone3) = 1 + 2 + 4 = 7, 其大小为结构体中个字段大小之和,这也是最节省空间的一种写法。

总结:

第一种写法,空间浪费严重,sizeof 计算大小与预期不一致,但是保持了每个字段的数据类型。这也是最常见的漫不经心的写法,一般人很容易这样写;


第三种写法,最节省空间的写法,也是使用 sizeof 求大小与预期一样的写法,但是全部使用字节类型,丢失了字段本生的数据类型,不方便使用;


第二种写法,介于第一种和第三种写法之间,其空间上比较紧凑,同时又保持了结构体中字段的数据类型。


只要了解是这些写法的差异性,可以视情况选用。

热点内容
按键精灵数据库操作 发布:2025-05-20 14:08:33 浏览:591
360浏览器无法访问网络 发布:2025-05-20 14:05:13 浏览:834
存储服务器地址错误 发布:2025-05-20 14:01:46 浏览:912
数据库优先 发布:2025-05-20 13:59:39 浏览:278
androidurl判断 发布:2025-05-20 13:50:11 浏览:259
共享文件夹没有启动服务器服务 发布:2025-05-20 13:43:38 浏览:804
天龙八部游戏怎么切换服务器 发布:2025-05-20 13:42:36 浏览:631
亚马逊免费主机是什么配置 发布:2025-05-20 13:40:10 浏览:696
存储类型默认分配 发布:2025-05-20 13:32:26 浏览:663
qq信息加密 发布:2025-05-20 13:31:32 浏览:342