C语言变量类型及其表示范围

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42410605/article/details/102738162

一般来说,基本数据类型分为整型、浮点型、字符型,C++中又包括布尔型。每种类型里面又可以分为若干种类型(为了方便记忆,只列出常用的)。如下列出了四种基本数据类型。

四种基本数据类型
  类型

取值范围

大致范围
整型 int

-2147483648~+2147483648

(即-2^31~+(2^31-1))

-2*10^9~+2*10^9

long long

-2^63~+(2^63-1)

-9*10^18~+9*10^18

浮点型 float

-2^128~+2^128

(实际精度6~7位)

实际精度6~7位

double

-2^1024~+2^1024

(实际精度15~16位)

实际精度15~16位

字符型 char

-128~+127

-128~+127

布尔型 bool

0(false)or 1(true)

0(false)or 1(true)

1.整型

整型一般可以分为短整型(short)、整型(int)和长整型( long long),其中短整型(short)一般用不到,此处不再赘述。下面介绍整型(int)和长整型( long long),其中整型int也被称为 long int,长整型 long long也被称为 long long int。

①对整型int来说,一个整数占用32bit,也即4Byte,取值范围是2^31~+(2^31-1)。如果对范围不太有把握,可以记住绝对值在10^9范围以内的整数都可以定义成int型。

②对长整型long long来说,一个整数占用64bit,也即8Byte,取值范围是-2^63~+(2^63-1),也就是说,如果题目要求的整数取值范围超过2147483647(例如10^10或者10^18),就得用long long型来存储。

除此之外,对于整型数据,都可以在前面加个 unsigned,以表示无符号型,例如 unsigned int unsigned long long,占用的位数和原先相同,但是把负数范围挪到正数上来了。也就是说,unsigned int的取值范围是0~2^32-1, unsigned long long的取值范围是0~2^64-1。一般来说,很少会出现必须使用 unsigned int和 unsigned long long的情况,因此初学者只需要熟练使用int和 longlong即可。

简单来说,需要记住的是,看到题目要求10^9以内或者说32位整数,就用int型来存放如果是10^18以内(例如10^10)或者说64位整数,就要用 long long型来存放。

2.浮点型

通俗来讲,浮点型就是小数,一般可以分为单精度(float)和双精度( double)。

①对单精度float来说,一个浮点数占用32bit,其中1bit作为符号位、8bit作为指数位、23bit作为尾数位(了解即可),可以存放的浮点数的范围是-2^128~+2^128,但是其有效精度只有6~7位(由2^23可以得到,读者只需要知道6~7位有效精度即可)。这对一些精度要求比较高的题目是不合适的。

②对双精度double来说,一个浮点数占用64bit,其中依照浮点数的标准,1bit作为符号位、11bit作为指数位、52bit作为尾数位,可以存放的浮点数的范围是-2^1024~+2^1024,其有效精度有15~16位,比float优秀许多。

3.字符型

(1)字符变量和字符常量

在C语言中,字符常量使用ASCII码统一编码。标准ASCIi码的范围是0~127,其中包含了控制字符或通信专用字符(不可显示)和常用的可显示字符。在键盘上,通过敲击可以在屏幕上显示的字符就是可显示字符,比如0~9、A~Z、a~z等都是可显示字符,它们的ASCⅡ码分别是48~57、65~90、97~122,不过具体数字不需要记住,只要知道小写字母比大写字母的ASCII码值大32即可。ASCII表如下

ASCII控制字符

二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义
0000 0000 0 00 NUL 空字符(Null)
0000 0001 1 01 SOH 标题开始
0000 0010 2 02 STX 本文开始
0000 0011 3 03 ETX 本文结束
0000 0100 4 04 EOT 传输结束
0000 0101 5 05 ENQ 请求
0000 0110 6 06 ACK 确认回应
0000 0111 7 07 BEL 响铃
0000 1000 8 08 BS 退格
0000 1001 9 09 HT 水平定位符号
0000 1010 10 0A LF 换行键
0000 1011 11 0B VT 垂直定位符号
0000 1100 12 0C FF 换页键
0000 1101 13 0D CR 归位键
0000 1110 14 0E SO 取消变换(Shift out)
0000 1111 15 0F SI 启用变换(Shift in)
0001 0000 16 10 DLE 跳出数据通讯
0001 0001 17 11 DC1 设备控制一(XON 启用软件速度控制)
0001 0010 18 12 DC2 设备控制二
0001 0011 19 13 DC3 设备控制三(XOFF 停用软件速度控制)
0001 0100 20 14 DC4 设备控制四
0001 0101 21 15 NAK 确认失败回应
0001 0110 22 16 SYN 同步用暂停
0001 0111 23 17 ETB 区块传输结束
0001 1000 24 18 CAN 取消
0001 1001 25 19 EM 连接介质中断
0001 1010 26 1A SUB 替换
0001 1011 27 1B ESC 跳出
0001 1100 28 1C FS 文件分割符
0001 1101 29 1D GS 组群分隔符
0001 1110 30 1E RS 记录分隔符
0001 1111 31 1F US 单元分隔符
0111 1111 127 7F DEL 删除

ASCII可显示字符

二进制 十进制 十六进制 图形
0010 0000 32 20 (空格)(␠)
0010 0001 33 21 !
0010 0010 34 22 "
0010 0011 35 23 #
0010 0100 36 24 $
0010 0101 37 25  %
0010 0110 38 26 &
0010 0111 39 27 '
0010 1000 40 28 (
0010 1001 41 29 )
0010 1010 42 2A *
0010 1011 43 2B +
0010 1100 44 2C ,
0010 1101 45 2D -
0010 1110 46 2E .
0010 1111 47 2F /
0011 0000 48 30 0
0011 0001 49 31 1
0011 0010 50 32 2
0011 0011 51 33 3
0011 0100 52 34 4
0011 0101 53 35 5
0011 0110 54 36 6
0011 0111 55 37 7
0011 1000 56 38 8
0011 1001 57 39 9
0011 1010 58 3A :
0011 1011 59 3B ;
0011 1100 60 3C <
0011 1101 61 3D =
0011 1110 62 3E >
0011 1111 63 3F ?
 
二进制 十进制 十六进制 图形
0100 0000 64 40 @
0100 0001 65 41 A
0100 0010 66 42 B
0100 0011 67 43 C
0100 0100 68 44 D
0100 0101 69 45 E
0100 0110 70 46 F
0100 0111 71 47 G
0100 1000 72 48 H
0100 1001 73 49 I
0100 1010 74 4A J
0100 1011 75 4B K
0100 1100 76 4C L
0100 1101 77 4D M
0100 1110 78 4E N
0100 1111 79 4F O
0101 0000 80 50 P
0101 0001 81 51 Q
0101 0010 82 52 R
0101 0011 83 53 S
0101 0100 84 54 T
0101 0101 85 55 U
0101 0110 86 56 V
0101 0111 87 57 W
0101 1000 88 58 X
0101 1001 89 59 Y
0101 1010 90 5A Z
0101 1011 91 5B [
0101 1100 92 5C \
0101 1101 93 5D ]
0101 1110 94 5E ^
0101 1111 95 5F _
 
二进制 十进制 十六进制 图形
0110 0000 96 60 `
0110 0001 97 61 a
0110 0010 98 62 b
0110 0011 99 63 c
0110 0100 100 64 d
0110 0101 101 65 e
0110 0110 102 66 f
0110 0111 103 67 g
0110 1000 104 68 h
0110 1001 105 69 i
0110 1010 106 6A j
0110 1011 107 6B k
0110 1100 108 6C l
0110 1101 109 6D m
0110 1110 110 6E n
0110 1111 111 6F o
0111 0000 112 70 p
0111 0001 113 71 q
0111 0010 114 72 r
0111 0011 115 73 s
0111 0100 116 74 t
0111 0101 117 75 u
0111 0110 118 76 v
0111 0111 119 77 w
0111 1000 120 78 x
0111 1001 121 79 y
0111 1010 122 7A z
0111 1011 123 7B {
0111 1100 124 7C |
0111 1101 125 7D }
0111 1110 126 7E ~

注意:

字符常量必须用单引号标注起来,以区分是作为字符变量还是字符常量出现。为此,在C语言中,字符常量(必须是单个字符)必须用单引号标注,以表明它们是字符常量。

(2)转义字符

上面提到,ASCII码中有一部分是控制字符,是不可显示的。像换行、删除、Tab等都是控制字符。那么在程序中怎样表示ー个控制字符呢?对一些常用的控制字符,C语言中可以用一个右斜线加一些特定的字母来表示。例如,换行通过“n”来表示,Tab键通过“t”来表示。由于这种情况下斜线后面的字母失去了本身的含义,因此又称为“转义字符”。在实际做题目时,比较常用的转义字符就只有下面两个,希望读者能够记住。

(3)字符串常量

字符串是由若干字符组成的串,在C语言中没有单独一种基本数据类型可以存储(C++中有 string类型),只能使用字符数组的方式。因此这里先介绍字符串常量。

上面提到,字符常量就是单个使用单引号标记的字符,那么此处的字符串常量则是由双引号标记的字符集,例如" WOAIDERENBUAIWO"就是一个字符串常量。

字符串常量可以作为初值赋给字符数组,并使用%s的格式输出

最后指出,不能把字符串常量赋值给字符变量,因此 char c="abcd"的写法是不允许的。

4.布尔型

布尔型在C++中可以直接使用,但在C语言中必须添加 stdbool.h头文件才可以使用。布尔型变量又称为“bool型变量”,它的取值只能是ture(真)或者 false(假),分别代表非零。在赋值时,可以直接使用ture或false进行赋值,或是使用整型常量对其进行赋值,只不过整型常量在赋值给布尔型变量时会自动转换为true(非零)或者 false(零)。注意:“非零”是包括正整数和负整数的,即1和-1都会转换为tmue。但是对计算机来说,true和 false在存储时分别为1和0,因此如果使用%d输出bool型变量,则ture和 false会输出1和0。(c++文件扩展名为.cpp;C语言文件拓展名为.c,需要添加 include< stdboolh>头文件

猜你喜欢

转载自blog.csdn.net/qq_42410605/article/details/102738162