sizeof操作符与计算机中的单位

简介: `sizeof`是C语言中用于计算类型或变量占据内存大小的操作符,单位为字节。虽然C标准未明确规定各种类型的数据长度,但确保`sizeof(short)≤sizeof(int)≤sizeof(long)≤sizeof(long long)`。它在编译时进行计算,不产生运行时开销,有利于程序的可移植性和优化。例如,`sizeof(char)`、`sizeof(int)`和`sizeof(float)`分别返回相应类型占用的字节数。表达式`sizeof(s=b+1)`的`sizeof`会在编译时处理,不会执行表达式`s=b+1`。

不同的类型数据占用的内存大小不同


说明: C标准没有具体规定各种类型数据所占用存储单元的长度, 只要求

sizeof(short)≤sizeof(int)≤sizeof(long)≤sizeof(\longlong), 由各编译系统自行决定的


sizeof是计算类型或者变量所占空间大小的操作符

单位:字节

 

 

用sizeof运算符计算变量占内存空间的大小的好处


1.增加程序的可移植性


2.编译时执行的运算符,不会导致额外的运行时间开销


计算机中的单位:


bit-比特位


计算机中识别二进制:0和1


存储1的空间则是一个比特位


byte-字节


1字节=8bit


1kb=1024byte


1mb=1024kb


1gb=1024mb


1tb=1024gb


1pb=1024tb

 

sizeof的使用:


#include<stdio.h> 

int main()

{

printf("%zd\n",sizeof(char));

printf("%zd\n",sizeof(int));

printf("%zd\n",sizeof(float));

return 0;

}

 

sizeof计算的结果的类型是size_t,size_t是一种无符号的整数,这种整数值在打印的时候使用%zd

 

(int--%d


char--%c


字符串--%s)


sizeof的操作数如果不是类型,而是表达式的时候,可以省略掉后面的括号


如:


#include<stdio.h> 

int main()

{

short s=2;

int b=10;

printf("%zd\n",sizeof(s=b+1));

printf("s=%d\n",s);

return 0;

}


sizeof中表达式不计算


#include<stdio.h> 

int main()

{

printf("%zd\n",sizeof(char));

printf("%zd\n",sizeof(int));

printf("%zd\n",sizeof(float));

return 0;

}


sizeof在代码进行编译的时候,就根据表达式的类型确定了,类型的常用,而表达式的执行却要在程序运行期间才能执行,在编译期间已经将sizeof处理掉了,所以在运行期间就不会执行表达式了


目录
相关文章
|
11月前
|
C语言
c语言之计算字节大小的举例
c语言之计算字节大小的举例
109 0
|
10月前
【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记
【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记
61 0
|
3月前
|
存储 C语言
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
|
3月前
|
C语言
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
|
4月前
|
C语言
C语言(8)----长度计算方法:sizeof与strlen的对比
C语言(8)----长度计算方法:sizeof与strlen的对比
29 0
|
4月前
|
程序员 C语言
【C语言】函数----函数的分类、库函数详解(strcpy、memset)、自定义函数的实现(找较大值、交换两个数)
【C语言】函数----函数的分类、库函数详解(strcpy、memset)、自定义函数的实现(找较大值、交换两个数)
28 0
|
4月前
|
C++
C/C++】如何不使用 sizeof 求数据类型占用的字节数
C/C++】如何不使用 sizeof 求数据类型占用的字节数
|
4月前
|
存储 编译器 C语言
C语言巧用联合体union判定数据的存储格式(大小端)
C语言巧用联合体union判定数据的存储格式(大小端)
44 1
|
10月前
|
算法
全网最详细的sizeof运算和strlen函数讲解(通过多种数据类型举例)
全网最详细的sizeof运算和strlen函数讲解(通过多种数据类型举例)
|
11月前
|
存储 小程序 程序员
8k字详解整型(int)/字符型(char)/浮点型(float)/有符号(signed)/无符号(unsigned)数据在内存中的存储【程序员内功修炼/C语言】
8k字详解整型(int)/字符型(char)/浮点型(float)/有符号(signed)/无符号(unsigned)数据在内存中的存储【程序员内功修炼/C语言】
112 0