重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这期内容当中小编将会给大家带来有关C语言中有哪些类型,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
专注于为中小企业提供成都网站建设、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业志丹免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了数千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
相比于高级语言,C语言的整型数据类型都有固定位宽,即类型占多少位。比如下面的数据类型:
signed char unsigned char signed short unsigned short signed int unsigned int signed long unsigned long signed long long unsigned long long
由于平台的不同,这些类型的位宽可能有些不相同,但是可以确定的是,每个平台都有固定的位宽。为了在编程过程中明确指定位宽,增加代码的可读性和避免对平台依赖,各个平台都定义了自己指定位宽的基本类型,如Linux平台上在stdint.h
头文件就定义了如下类型
int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t
每个类型都指定了符号和位宽,从字面上就可以看到这个类型的位宽是多少。由于位宽的存在,导致每个类型都有自己的最大值和最小值,比如Linux又分别定义了每种类型的最大值和最小值(无符号数的最小值都是0)
INT8_MIN INT8_MAX INT16_MIN INT16_MAX INT32_MIN INT32_MAX INT64_MIN INT64_MAX UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
有了这些定义,C语言的运算基本都要都要这些边界值,否则就会造成传说中的整数溢出问题。如加法和乘法运算就要做如下判断:
//计算两个值的和 uint32_t sum(uint32_t a, uint32_t b) { /*先判断加法以后是否会溢出 注意这里不能用 (a+b)类型的符号
C语言的整型数据类型都包含符号修饰符:
signed
(有符号)或者unsigned
(无符号),但是符号修饰符并不影响数据真实的值,比如我们定义如下值:signed char a = -1 unsigned char b = (signed char)a;从内存的内容来讲,a的内存和b的内存是一致的,都是
11111111
,没什么区别,但是符号修饰符会影响逻辑判断的结果,比如虽然这两个值在内存上没什么区别,但是如果下比较会返回相反的结果:signed char a = -1 unsigned char b = (signed char)a; //成立 if (a < 0) { printf("a < 0\n"); } //成立 if (b > 0) { printf("b > 0\n"); }除了符号会影响逻辑判断之外,C语言的默认转换也会影响逻辑判断的结果,如下面的比较在不同的情况下,结果就不同
signed char a = -1 unsigned char b = (signed char)a; //不成立,a没有转换为`unsigned char` if (a > (unsigned char)0) { printf("unsigned char a > 0\n"); } //不成立,a没有转换为`unsigned short` if (a > (unsigned short)0) { printf("unsigned char a > 0\n"); } //成立,a转换为`unsigned int` if (a > (unsigned int)0) { printf("unsigned int a > 0\n"); }上述就是小编为大家分享的C语言中有哪些类型了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
当前标题:C语言中有哪些类型
标题URL:http://cqcxhl.com/article/jspscp.html