首页 > 编程知识 正文

uint8_t是什么数据类型,stm32数组首地址

时间:2023-05-05 11:42:06 阅读:147809 作者:3625

uint8_ t/uint 16 _ t/uint 32 _ t/uint 64 _ t是别名,c语言有哪些数据类型? 怎么取别名

C语言有六种基本数据类型:短、输入、长、浮点、双精度和字符

1、数值类型

1 )整形)短、int、long

2 )浮点型: float、double

2、字符类型: char

二.使用typedef

乍一看有点不明白了,也许是为了好看,源代码把它分开写了。实际红色框的是一个整体,是对这个整体取别名,同一个数据类型可以有多个别名类似于导师中的zgdl,或同学中的jqdnht

以下评论:

/*7. 18.1.1 */* exact-widthsignedintegertypes */typedefsignedcharint8_ t; //在有符号char中输入别名int8 _ ttypedefsignedshortintint 16 _ t; //在带符号的短int中输入别名int16_ttypedef signed int int32_t; //在有符号整数short int中输入别名int 32 _ ttypedefsigned _ int 64 int 64 _ t;/* exact-widthunsignedintegertypes */typedefunsignedcharuint8_ t; //在无符号char中输入别名uint8_ ttypedefunsignedshortintuint 16 _ t; //无符号短整数型短整型int加上别名uint 16 _ ttypedefunsignedintuint 32 _ t; //无符号整数在短整型中输入别名uint 32 _ ttypedefunsigned _ int 64 uint 64 _ t; /* 7.18.1.2 *///如上所述,另一个别名/* smallesttypeofatleastnbits *//* minimum-widthsignedintegertypes */typedefsifsits typedef signed int int_least32_t; typedef signed _ int 64 int _ least 64 _ t;/* minimum-widthunsignedintegertypes */typedefunsignedcharuint _ least8_ t; typedefunsignedshortintuint _ least 16 _ t; typedefunsignedintuint _ least 32 _ t; typedef unsigned _ int 64 uint _ least 64 _ t;/*7. 18.1.3 */* fastest minimum-widthsignedintegertypes */typedefsignedint _ fast8_ t; typedef signed int int_fast16_t; typedef signed int int_fast32_t; typedef signed _ int 64 int _ fast 64 _ t;/*快速最小- widthunsignedintegertypes */typedefunsignedintuint _ fast8_ t; typedefunsignedintuint _ fast 16 _ t; typedefunsignedintuint _ fast 32 _ t; typedef unsigned _ int 64 uint _ fast 64 _ t;为什么喜欢叫它 int8_t, uint8_t;int16_t, uint16_t;int32_t, uint32_t?

1、数据类型带有_t。 _t表示这些数据类型是在typedef中定义的,而不是新的数据类型。 也就是说,这些其实是我们知道的类型的别名。

2、8、16、32是什么意思?

这些数字都是位数。 也就是说,用多少位数保存数据? 1字节8位。 其中由于数字有正负粉,所以对应有符号(表示signed、最高位比特0、正数)、无符号)、最高位比特1、表示负数),所以表示的范围不同,但由于位数一致,所以表示的个数相同

例如,使用16位,即2个字节进行存储

typedef signed sh

ort int int16_t;//给有符号短整型short int,取别名int16_t
也可以是 typedef unsigned short int uint16_t;//给无符号短整型short int,取别名为uint16_t
int16_t 表示数据范围则是0 ~65535。
uint16_t 表示数据范围为-32768~32767
表示的个数是一样的:65536=2的16次方

参考这个博主的一段话:
整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0 ~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。同时在相同位数的情况下,所能表达的整数范围变大。

挖一下这句话
在默认情况下声明的整型变量都是有符号的类型(char有点特别),有什么特别呢

如何确认char到底是signed char还是unsigned char

ANSI C 提供了3种字符类型,分别是char、signed char、unsigned char 、char相当于signed char或者unsigned char,但是这取决于编译器
这三种字符类型都是按照1个字节存储的,可以保存256个不同的值。
signed char取值范围是 -128 到 127
unsigned char 取值范围是 0 到 255

有符号和无符号有默认的,可以省略不写,默认情况下声明的整型变量都是有符号的类型

typedef char int8_t;

如果编译器认为是signed char= char,上面那句就相当于

typedef signed char int8_t;

如果编译器认为是usigned char= char,上面那句就相当于

typedef usigned char int8_t;

再看:

typedef unsigned short int uint16_t;typedef unsigned int uint32_t;

参考:C语言中的整数(short,int,long)
short、int、long 是C语言中常见的整数类型,其中 int 称为整型,short 称为短整型,long 称为长整型。

int
short int:int可以省略
long int:int可以省略

描述 short、int、long 类型的长度时,只对 short 使用肯定的说法,而对 int、long 使用了“一般”或者“可能”等不确定的说法。这种描述的言外之意是,只有 short 的长度是确定的,是两个字节,而 int 和 long 的长度无法确定,在不同的环境下有不同的表现。
2 ≤ short ≤ int ≤ long

这就意味着,short 并不一定真的”短“,long 也并不一定真的”长“,它们有可能和 int 占用相同的字节数。
一般short 2字节,int 4字节,liong 8字节。

这样取别名为uint8_t / uint16_t / uint32_t /uint64_t 的好处是?
1,从名字一眼就可以看出,使用多少位来存数据,统一了“标准”
2,为了程序的可扩展性, 假如我们此刻将来我们需要的数据大小变成了64bit时,我们只需要将typedef long long size_t就可以了, 不然我们可要修改好多好多的地方了,当自己设计一个int类型保存某种数据时,但你又没把握将来是不是要用long int时你可以引用一个自己定义的数据类型

假如本程序此时需要一个数据大小为32位的用来存储正数的类型 size_t
在原来已经定义的如下别名的基础上:

typedef unsigned int uint32_t;typedef unsigned long int uint64_t;

可以再次取别名:

typedef uint32_t size_t ;

如果以后要改成64位的,就改为:

typedef uint64_t size_t ;

size_t在代码中出现的,含义全部更改,可扩展性好。

__int64这种类型是什么?
参考:long int与long long的区别

测试代码:

typedef unsigned int uint32_t;typedef unsigned long uLint32_t;typedef unsigned long long uint64_t;//typedef unsigned long long int uint64_t;typedef unsigned short int uint16_t;int main(){uint32_t a;a = 12;printf("unsigned int对应sizeof(a) = %dn", sizeof(a));uLint32_t a1;a1= 12;printf("nsigned long对应 sizeof(a1) = %dn", sizeof(a1));uint64_t b;b = 12;printf("unsigned long long对应 sizeof(b) = %dn", sizeof(b));uint16_t c;c = 12;printf("unsigned short 对应 int sizeof(c) = %dn", sizeof(c));int d;d= 12;printf("int 对应sizeof(d) = %dn", sizeof(d));long e;e = 12;printf("long 对应 sizeof(e) = %dn", sizeof(e));long long f;f = 12;printf("long long对应 sizeof(f) = %dn", sizeof(f));}

结果:

long int
  long int即long,lmdxn好像是长整型,但实际上,它和int一样,只有32位
int - basic integer type. The keyword int may be omitted if any of the modifiers listed below are used. If no length modifiers are present, it’s guaranteed to have a width of at least 16 bits. However, on 32/64 bit systems it is almost exclusively guaranteed to have width of at least 32 bits.
long - target type will have width of at least 32 bits.

long long则不同,long long是C++的64位整型的基本类型,“现任”长整型,从C99开始引入这个概念,在后续的标准中完善概念和定义,C++11官方正式标准如下——
long long - target type will have width of at least 64 bits.(since C++11)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。