数据类型及其长度
数据类型及其长度
c/c++数据类型:
1、整形:int、long
2、字符型:char、wchar_t
3、布尔型:bool
4、浮点型:float、double
5、指针
从表中可以看出这么几个问题,int类型在64位系统下竟然是4个字节32位的。还有,这些玩意儿到底跟什么有关系?是谁在控制着?从网上扒了各种解释,大概有这么两点:
1、64位系统下,编译器为了向前兼容,将int类型自动编译为4个字节的了;
2、这些个玩意儿就是编译器来控制的,不同的编译器将int类型编译成不同长度的,所以,使用什么编译器才是重要的,比如:32位系统,tc下的int就是16位长度的,VC就是32位长度的。
3、long long是标准的8 bytes,不受编译器限制,所以,16位的依然也是8 bytes。
通过上面的介绍,应该大致明白整型的定义了吧,所以我们在使用整型变量的时候还是得小心的,尤其需要其所占空间长度的时候,千万不要想当然的认为int在32位系统下就是4个字节。尽量使用sizeof取值,就是说最好在代码中使用sizeof看下具体是多少,比如我win10系统64位,sizeof(double)就是8.
一、整形
下面一段话选自《C程序设计语言》:
short与long两个限定符的引入可以为我们提供满足实际需要的不同长度的整形数。int通常代表特定机器中证书的自然长度。short类型通常为16位,long类型通常为32位,int类型可以为16位或32位。各编译器可以根据硬件特性自主选择合适的类型长度,但要遵循下列限制:short与int类型至少为16位,long类型至少为32位,并且short类型不得长于int类型,而int类型不得长于long类型。
下面一段话选自《C++ Primer》:
short、int和long类型都表示整型值,存储空间的大小不同。一般,short类型为半个机器字长(word)长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中int类型和long类型通常字长是相同的)。
二、字符型
char类型通常占据一个字节,对于用于扩展字符集的wchar_t类型,需要占据两个字节。
三、布尔型
bool占据一个字节
四、浮点型
float占据4个字节,double是float的两倍即8个字节
五、指针
指针字节长度计算原理其实跟int差不多,一个指针的位数和操作系统的位数是相等的,即32位系统应该是4个字节,64位系统应该是8个字节。
PS.代码演示如下
原文链接:https://blog.csdn.net/u013066730/article/details/82700061
冰激凌810: 您好请问您实现了stm32上的移植吗
好家伙VCC: 博主写的教程很清楚,我写了20多篇关于编码器测速+STM32CubeMX开发+GPIO、ADC采集+PID电机控制+openmv手把手开发的教程欢迎大家一起交流:这是文章:https://blog.csdn.net/qq_46187594/article/details/138110155?spm=1001.2014.3001.5502 这个是视频:https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click
m0_48488484: 最后你解决了吗,我也有负值
ks1257453786: 这个算出来的deta_kp有负值,怎么用啊
陌善森: 请问一下在哪里可以获取到对应设备的从机地址呢