目录
一.int(%d)
1.sizeof应用
2.声明int变量以及初始化
3.打印int值
二.short(%hd)和long(%ld)
1.short大小
2.long大小
3.short和long的分支
三.综合讲解
四.整数类型总结
五.可移植类型: stdint.h 和 inttypes.h
在上一节当中我们讲解了C语言数据的存储类型基本大类就是整数和浮点数,所以在这一章当中我们就要开始讲解不同字节大小的整数存储,而把整数类型的大类分为图如下,其实还是以sort,int,long还有一个unsigned,无符号整数。其他的都是在这四个基础上进行扩展。
一.int(%d)
1.概念介绍
int类型基本会成为你的日后编程所用到最多的整型类型。
Int 类型是有符号整数(signed int),既int类型的值必须是整数,可以是正整数,负整数或零。存储一个int要占用一个计算机字长。因此在早起16位IBM PC 兼容机使用16位来存储一个int 值,目前我们个人计算机一般都是32位的,因此一般都用32位来存储一个int值。
像我的电脑就是32位的,占用4个字节。
1.sizeof应用
sizeof函数接受一个类型,返回一个类型所占大小,使用%zd,如果zd不行其实用%d也可以(但编译器会警告不报错),用%lu(unsigned long int)也可以(也只是警告不报错)。
2.声明int变量以及初始化
变量声明可以单独声明或多条声明,就是声明多条变量是要用逗号分隔,我这里就一下声明了erns,cows,goats三个变量,同时为goats变量初始化了一个1值。
像1这样值我们一般称为整型常量或整型字面量
这里需要特别知道一个概念。
声明变量 == 只创建内存空间不赋值(会产生垃圾值)
而初始化变量 == 创建内存空间后再为其赋值
3.打印int值
打印int类型的数据,使用%d占位符
这里要记住占位符类型必须和变量存储的数据类型匹配以及数量一直,不然容易引起计算机报错
二.short(%hd)和long(%ld)
1.short大小
Short 其实就是signed short int,光看名字我们大概就知道short所存储的数和占用空间要比int小。
但其实官方的定义是,short <= int;是可以和int一样的。我们这里用sizeof测试下具体字节。
我们可以看到short字节占用只有int的一半。为两个字节
2.long大小
而long是signed long int的缩写。官方定义为long >= int;同样的我们也用sizeof测试看下。
这里可以看到在我所使用的编译器中,long和int所占用的字节大小是一样的。
3.short和long的分支
short int(简写short):占用的存储空间比int类型少,常用于较小数值的场合以节省空间
long int(long):占用的存储空间比int类型多,多适用于较大数值的场合
long long int(long long):占用的存储空间比long多,适用于大数据的场合(一般占用64位)
unsigned int(unsigned) :用于非负值的场合
在c90标准中,又添加了 unsigned long int(unsigend long) 和 unsigned short int(unsigned short)。C99标准中又添加了unsigned long long int(unsigned long long)
在任何有符号类型前面添加关键字 signed,可强调使用有符号类型的意图,如short,short int,signed short ,signed short int 都表示同一种类型
在一般个人计算机最常见的设置是: long long 占64位,long 占32位,short 占16位,int 占16位或32位
三.综合讲解
首先我们先来看
红色第一行,对于无符号变量un,使用%d会生成赋值,主要愿意是无符号值3000000000和有符号值-129496296在系统内存中的内部表达完全相同。这种情况只会出现爱待打印的无符号值大于有符号值的最大值时,会发生这种情况,对于较小的正数,有符号和无符号类型的存储,显示都相同.
绿色第二行,打印short类型用%hd或%d打印的值都相同,这主要是因为在给函数传递参数时,c编译器把short类型的值自动转换成int类型的值。(转换的主要原因时int类型被认为时计算机处理整数类型时最高效的类型,因此在short和int类型的大小不同的计算机中,用int类型的参数传递速度最快)
蓝色第三行,把65537以二进制格式写成一个32位数时 0…0(15个零)1 0…0(15个零)。而使用%hdprintf()只会查看16位,也就是1
而白色第四行,和第三行原理一样,%lld 用64位,%ld用32位
四.整数类型总结
对于整数类型的知识点大家重点理解int基本就够了,然后short和long以后需求用的上大家在重点应用。
五.可移植类型: stdint.h 和 inttypes.h
为了解决类型名在不同系统的功能不一样.c99新增加了两个头文件stdint.h和inttypes.h,以确保烈性在各系统的功能相同,这块仅作了解,一时不了解也没事,以后要用到的就会明白了
精确宽度整数类型: int32_t表示整数类型的宽度正好是32位,啥意思呢,就是int32_t表示32位的有符号整型类别,然后有些计算机int 类型是32位,而有些是long类型,为了方面移植,所以可以用int32_t代替,因为它在int为32位的系统中就是int的别名,在long为32位的系统中就是long的别名
最小宽度类型:一些类型名保证所表示的类型一定是只有有指定宽度的最小整数类型。比如int_least8_t可容纳8位有符号整数值的类型中狂赌最小类型的别名
最快最小宽度类型:可是计算机达到最快的类型集合。比如int_fast8_t被定义为系统中对8位有符号值而言运算最快的整数类型的别名
顺带在说两个特别的类型名,intmax_t可存储任何有效的有符号整数值,.uintmax_t 表示最大的无符号整数类型
而针对要打印int32_t这类型的值,可以使用%d或%ld,但inttypes.h提供l1一个PRID32字符宏来进行合适转换,在使用是用
这里主要主要下两张图红色括号,在使用PRID32时,因为它是一个字符宏(相当于就是d),所以在做打印时记得把PRId32和%分开就好了
好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~
如果朋友你感觉文章的内容对你有帮助,可以点赞,关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈