C语言

您所在的位置:网站首页 c语言中short型的取值范围 C语言

C语言

2023-03-30 16:31| 来源: 网络整理| 查看: 265

C语言中有3种基本数据类型,分别是整型、字符型和实型(浮点型),下表列出的是32位平台数据类型的长度及其取值范围

类别名称类型名数据长度取值范围整型[有符号]整型[signed] int32位-2147483648~2147483647(-2^31 ~ 2^31-1)[有符号]短整型[signed] short [int]16位-32768~32767(-2^15 ~ 2^15-1)[有符号]长整型[signed] long [int]32位-2147483648~2147483647(-2^31 ~ 2^31-1)无符号整型unsigned [int]32位0~4294967295(0 ~ 2^32-1)无符号短整型unsigned short [int]16位0~65535(0 ~ 2^16-1)无符号长整型unsigned long [int]32位0~4294967295(0 ~ 2^32-1)字符型[有符号]字符型[signed] char8位-128~127(-2^7 ~ 2^7-1)无符号字符型[signed] char8位0~255(0 ~ 2^8-1)实型(浮点型)单精度浮点型float32位约±(10^-38 ~ 10^38)双精度浮点型double64位约±(10^-308 ~ 10^308) 注:方括号中的内容可以省略,且一般都是省略的。 一、整型与整型常数(整数) 1、整型

整型是不存在小数的数据类型。在C语言中,为了处理不同取值范围的整数,提供了一些扩展的整数类型,它们是在int前加加入short、long或unsinged等限定词。 带有unsigned限定词的数据类型表示的是不带符号的整数,即0或正整数,不包括负数;若不带unsigned限定词则默认是表示有符号数,例如int表示的是有符号数,其中int前的signed一般都会省略。有符号的整型数据存储单元的最高位是符号位,其余的各位表示数值;存储无符号(即unsigned修饰)的整型数据时,存储单元全部用于表示数值,没有单独表示符号的位。 以short型和unsigned short型举例,假设它们都占用两个字节存储,short型的取值范围是[-32768, 32767],而unsigned short型数据的取值范围是[0, 65535]。 short型最大正数32767(215−12^{15}-1215−1)在这里插入图片描述unsigned short型最大正数65535(216−12^{16}-1216−1) 在这里插入图片描述 在C语言中,没有规定各类整型数据的长度,只要求short型不长于int型,long型不短与int型。一般来说数据所占用的存储单元和编译系统的位数相关,例如上表列出的与Dev-C++编译系统规定的一致,而Turbo C编译系统中,int和unsigned型数据的长度就只有16位。在编译器可以使用sizeof(int)等判断数据类型所占的存储字节。 C语言整型数据的扩展还有long long类型,一般来说32位编译系统long long类型所占存储单元是8个字节(64位)(long long类型可能在某些编译系统不支持)。

2、整型常量

直接写的整数就是整型常量,例如24就是个整型常量。合法的整型常量的值不应超过上表中整型数据的取值范围。 ① 整数的表示 C语言中表示整数有十进制、八进制和十六进制三种形式。十进制由正、负号和阿拉伯数字0 ~ 9组成,但是首位数字不能是0。八进制整数由正、负号和阿拉伯数字0 ~ 7组成,首位数字必须是0。十六进制整数由正、负号和阿拉伯数字0 ~ 9、英文字符a ~ f或A ~ F组成,首位数字前必须有前缀0x或0X。不带符号默认为正数。 例如:10、010和0x10分别为十进制、八进制和十六进制整数,它们表示的是不同数值的整数。10是十进制数值,010的十进制数值是8,0x10的十进制数值是16;16、020和0X10分别为十进制、八进制和十六进制整数,它们表示同一个数值的整数,都表示十进制数值16。 0381、8a和0x2g这种表示是非法的,八进制不能出现比7大的数字,而十进制也不能出现字母,若表示十六进制前缀0x或0X不能省略,且不能出现g及以后的字母。 对于任何一个整数都可以采用三种形式表示,不会影响到它们的数值、计算和比较,它们只是整数数值的三种不同的表现形式而已。例如十进制的10可以表示成10、012或0xA。 ②整数的类型 整数后可以加字母后缀表示整数的类型。后缀l或L表示的是long型常量,如-15L,01234567L;后缀ll或LL表示的是long long型常量,如-15ll;后缀u或U表示unsigned型常量,如15u,045u,0x3feU;后缀l和u或L和U表示unsigned long型常量,如4294967295LU。 如果整数后面没有字母后缀,那么如果数值范围在int的范围,则默认为int型,若超过int的范围则数据类型是可以存储该整型数据的更大的整型,例如在Dev-C++中则为long long型,sizeof(2147483648) = 8。

二、字符型与字符型常量 1、字符型

字符型数据在内存中占用一个字节,用于存储它的ASCII码。C语言中的字符具有数值特征,它可以写成字符常量的形式,还能用其相应的ASCII码来表示,即用整数来表示字符,且可以使用其相应的ASCII码来计算、比较等。 例如:定义ch为字符变量,字符型常量A的ASCII码值是65,那么ch = 'A’和ch = 65是等价的。注意表示字符时单引号不能省略。 字符型变量和整型变量的值可以互换,但是超过字符型变量的取值范围的话就不能互换了,即在0~127它们可以表示相同的意义。

2、字符型常量

字符型常量是指单个字符,它用一对单引号及其所括起来的字符来表示的。如’a’、‘Z’、‘$’、’ ‘(空格符)等都是字符型常量。字符型常量需要注意的是’a’和’A’是不同的字符型常量,即C语言的字符型常量是区分大小写的;‘0’与0是不同类型的常量,‘0’表示字符型常量,其ASCII码是48,而0表示的是整型常量,它就是0。 ①ASCII字符集 C语言使用的是ASCII字符集,C语言中字符可以当整数用,它们能用于比较、计算等。如果是单独的字符型常量,那么C语言中会默认当做int型数据来处理,存储它的ASCII码,即单个字符常量会占用4个字节(32位平台),C语言中字符常量与它所对应的ASCII码是等价的。ASCII码表参考:https://blog.csdn.net/passxgx/article/details/123793691?spm=1001.2014.3001.5501 例如:‘a’的ASCII码是97,‘a’+1=98,表示的就是字符’b’。英文字母的大写和小写是按照升序连续排列的,但是大小写字母并不连续,即’A’ ~ ‘Z’,‘a’ ~ ‘z’是连续升序排列的,但是’Z’与’a’并不连续;阿拉伯数字‘0‘~‘9‘也是连续升序排列,‘0’+1是字符’1’,但是’0’+‘1’是它们相应的ASCII码相加,即为48+49=97,这个表示的不是字符’1’,相应的字符应该是’a’。 ②转义字符 转义字符是由反斜杠加上一个字符或数字组成的,它把反斜杠后面的字符或数字转换成别的意义。虽然转义字符形式上是由多个字符组成,但是它是字符常量,只代表一个字符,它的用法与其他字符常量相同。下表是常见的转义字符:

字符含义对应的ASCII码十进制十六进制\r回车130x0D\n换行100x0A\t横向跳格(水平制表符)90x09\\反斜杠920x5C\"双引号340x22\’单引号390x27\ddd1~3位八进制整数所代表的的字符--\xhh1~2位十六进制整数所代表的的字符--

上表中最后两行采用的是ASCII码(八进制整数、十六进制整数)表示一个字符。例如,\102表示ASCII码是八进制数102的字符,即字母’B’;\x41表示ASCII码是十六进制数41的字符,即字母’A’。这样表示,ASCII字符集中的所有字符都可以用转义字符表示。

三、实型与实型常量(实数) 1、实型

实型又称浮点型,它是指带有小数部分的数。 浮点型数据有单精度浮点型(float)和双精度浮点型(double)两种,它们表示数值的方法是一样的,区别是数据的精度和取值范围不同。double型数据的精度更高,取值范围更大。 单精度浮点型数据在内存中占4个字节存储空间,即32位,其有效数字一般为7~8位,取值范围是±(10−38±(10^{-38}±(10−38 ~ 1038)10^{38})1038);双精度浮点型数据占8个字节,即64位,它的有效数字一般为15~16位,取值范围为±(10−308±(10^{-308}±(10−308 ~ 10308)10^{308})10308)。浮点型数据不存在有符号和无符号之分,在不同的编译系统所占用的存储空间是相同的。 浮点型数据的精度可能会出现变化。例如1234567.89虽说在单精度浮点数的取值范围内,但是它的有效数字超过了8位,如果该数赋值给单精度浮点型变量,其值就变成了1234567.80,最后一位成了一个随机数,损失了有效精度。注意:实数在计算机中只能近似表示,运算中也会产生误差,一般来说不能用于精确比较。

2、实型常量

实型常量即实数,又称浮点数。可以采用十进制浮点数表示法和科学计数法表示。实型常量C语言中默认是存储成双精度浮点数的,但是可以通过后缀f表示成单精度浮点型数据。例如:2.7默认为doublue型,2.7f则为float型。 ①浮点表示法:实数由正负号、阿拉伯数字0~9和小数点组成,必须要有小数点,且小数点的前后至少一边要有数字。若小数点前没有数字,则默认整数部分为0,同样若小数点后没有数字,也默认小数部分为0。实数的浮点表示法又称实数的小数形式。 ② 科学计数法:实数有正负号、数字和字母e(或E)组成,e是指数的标志,则e之前要有数据,e之后的指数只能是整数。实数的科学计数法又称实数的指数形式。 例:3.14、2.(小数点后没有数字)、.2(小数点前没有数字)与6.026E-27是合法的实数,而0.2E2.3和E-5都是非法表示。 科学计数法一般用于表示很大或者很小的数,如普朗克常数6.026×10−276.026×10^{-27}6.026×10−27可以表示为6.026E-27,也可以表示为60.26e-28、602.6e-29或0.6026e-26。

四、基本数据类型的存储单元大小

由于不同的编译平台相同的数据类型所占用的存储单元不同,C语言可以使用sizeof关键字来查看不同的数据类型所占用的字节数。下面是采用Dev-C++测试前面所讲的所有数据类型的大小:

#include int main(void) {printf("sizeof(char) = %d\n", sizeof(char));printf("sizeof(int) = %d\n", sizeof(int));printf("sizeof(unsigned int) = %d\n", sizeof(unsigned int));printf("sizeof(short) = %d\n", sizeof(short));printf("sizeof(unsigned short) = %d\n", sizeof(unsigned short));printf("sizeof(long) = %d\n", sizeof(long));printf("sizeof(unsigned long) = %d\n", sizeof(unsigned long));printf("sizeof(long long) = %d\n", sizeof(long long));printf("sizeof(float) = %d\n", sizeof(float));printf("sizeof(double) = %d\n", sizeof(double));printf("sizeof(-15) = %d\n", sizeof(-15));printf("sizeof(-15l) = %d\n", sizeof(-15l));printf("sizeof(-15ll) = %d\n", sizeof(-15ll));printf("sizeof(15u) = %d\n", sizeof(15u));printf("sizeof('a') = %d\n", sizeof('a'));printf("sizeof('\\r') = %d\n", sizeof('\r'));printf("sizeof('2.3') = %d\n", sizeof(2.3));printf("sizeof('2.3f') = %d\n", sizeof(2.3f));printf("sizeof('2.3E2') = %d\n", sizeof(2.3E2));return 0;}

sizeof(char) = 1 sizeof(int) = 4 sizeof(unsigned int) = 4 sizeof(short) = 2 sizeof(unsigned short) = 2 sizeof(long) = 4 sizeof(unsigned long) = 4 sizeof(long long) = 8 sizeof(float) = 4 sizeof(double) = 8 sizeof(-15) = 4 sizeof(-15l) = 4 sizeof(-15ll) = 8 sizeof(15u) = 4 sizeof(‘a’) = 4 sizeof(‘\r’) = 4 sizeof(‘2.3’) = 8 sizeof(‘2.3f’) = 4 sizeof(‘2.3E2’) = 8

参考 C语言程序设计(第4版)/何钦铭,颜晖 例题及课后习题参考程序https://gitee.com/sgxgitee/mooc-c



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3