当前课程知识点:高级语言程序设计 > 顺序结构程序设计 > 2.2 数据类型 > 整型数据
大家好
本讲我们介绍C语言的整型数据和字符型数据
C语言为程序员提供了多种整数类型
每种整数类型的长度如表所示
C语言并没有规定int几个字节
只规定了int类型在内存中占的字节数
不多于long类型
不少于short类型
目前大多数系统上int类型在内存中的
都是占用四个字节的内存空间
下面我们来看看整数类型在内存中的存储方式
先来看有符号的正整数
有符号的正整数
在内存中以二进制原码形式存放
例如10他在内存中的存放形式占四个字节
第一位是符号位
注意是以二进制原码的形式存放的
那么int在内存中的
可表示的最大的正整数是231-1
再来看看有符号的负整数
在内存中的存储形式
有符号的负整数
在内存中是以二进制补码的形式存放
我们来看看-10在内存中的存储印象
第一位符号位
1表示负数
在内存中占四个字节
二进制补码是这样得到的
首先写出二进制的-10的原码
按位取反加1后得到-10的补码
这就是-10在内存中的存储形式
再来看看无符号整数
无符号整数
所有的二进制位都用来存放数字
那么无符号整数最大值所有的位数都为1
第一位也是数据为
那么它表示的数的范围为232-1
是有符号整数的两倍
现在我们来看整型常量
整型常量有三种形式
十进制形式
八进制形式
前面带零
16进制形式带前缀0X或者是大写的大X
那么整型常量根据值的大小
默认类型是int型
在常量后面加小l或大L修饰符的话
表示的是long int型
再来看看整型变量
首先定义整型变量
int a,b;
short i,j;
i j为short型变量
m n为log型变量
x y为无符号整型变量
如果既不指定signed
也不指定unsigned则隐含为有符号
定义变量时
注意考虑变量所占字节数和取值范围
下面我们来看一个程序
这个程序里面定义了两个整型变量a b
这个2147483647是整型常量
这条语句将这个整型常量
赋值给a这个变整型变量
那么运行结果怎么样呢
我们可以看到a的值是如数输出来的
2147483647
但是b的值不是等于正的2147483648
而是等于负-2147483648
这是因为b的值发生了溢出
Int类型变量能够存储的最大正整数位为2147483647
现在我们来看字符的存储方式
计算机使用一种数学编号
也就是整数来表示字符
每一个字符都对应一个特定的整数
C语言用的编码是美国信息交换用标准码
简称ASCII码
ASCII码规定了每个字符对应的编码
字符的存储方式与整数相同
C语言就用一个字节来保存一个字符的
比如说字母a的ASCII码值为65
在内存占一个字节
并且以65的二进制形式存储
字符常量分普通字符和转义字符两种
普通字符也就是可打印字符
是用一对单引号括起来的字符
单引号只是字符与其他部分的分隔符
或者说是字符常量的定界符
不是字符常量的一部分
不能用双引号代替单引号
字符常量的值就是该字符的ASCII码值
单引号中的字符不能是单引号或者反斜杠
转义字符
斜杠后面跟着一个字符或者一个代码值
表示的就是一个转义字符
如\n \t \b等
斜杠表示将其后的字符原来的含义进行转换
变成某种有特殊含义的字符
比如说\n代表的是一个换行符
它是一种控制字符
在屏幕上是不能显示的
也无法用一个一般形式的字符表示
转义字符除了可以表示控制字符
还可以表示普通字符
如\101表示的字符是A
下面我们来看看这个程序的运行结果
这一段代码屏幕输出如下所示
那么我们来分析一下这个程序
第一个printf语句是为了给我们
表示出屏幕的位置的
我们来看看第二个printf语句
第二个printf语句里面\t是跳到下一个制表位
那么\t后面的l不是在第二列输出的
而是在第九列输出的
再来看\b
\b是退格键
那么\b前面是个小写的S没有输出
\b后面是e
这是因为\d起到了将光标移到了前一位
\r是回车 但不换行
那么这个大写的\r
将光标移到了本行的第一位
那么本来第一位是个小写的c
现在变成了这个\r后面的大写的C
再来看第三个printf语句
\t还是一个制表位
所以u和l是对齐的
都在屏幕的第九列输出
再来看这个\165
这个165是表示的是八进制数
那么把这个165转换成十进制是为117
117是ASCII码中的u的值
字符u的值
\x6c
6c是十六进制数
将这个十六进制数转换成十进制数为108
大家看是按照6×16+12来转换
108是ASCII码为l的字符
大家通过这个事例
能看到这个普通字符和转义字符的区别
现在我们来看一下字符变量
C语言的字符类型名称为char
C语言的字符变量占一个字节
可以视为一个有符号的整形
下面我们来看一下这个程序
在这个程序里定义了两个字符变量c1和c2
我们将97赋给字符变量c1
将a这个字符与32相减以后赋给c2
那么第一条printf语句输出c1的值
以两种格式输出c1的值
一种是%c的格式
一种是%d的格式
第二条printf语句
输出c2的值也是以%d和%c的格式输出
我们大家来看一下
c1如果以%c的格式输出
它就是小写的字符a
以%d的格式输出
它就是整数97
同样c2也是
如果以字符格式输出
它是大写的A
以%d的格式输出
它是整数65
从这个代码我们可以看出
整数类型和字符类型的数据可以通用
整型变量和字符型变量可以互相赋值
字符型数据可以直接与整型数据进行算术运算
只能将一个字符常量赋给一个字符变量
不能把一个字符串赋给一个字符变量
小结一下
本讲我们讲了整数类型的数据存储方式
整型常量及整型变量的定义及使用
字符类型数据存储方式
字符常量和字符串量的定义和使用
本讲内容讲到这里
谢谢大家
-1.1 计算机程序和计算机语言
-1.2 C程序的构成
--C程序的构成
-1.3 C语言编辑、编译、运行(VC++2010学习版)
-练习题
-2.1 变量的定义和使用
--变量的定义和使用
-2.2 数据类型
--数据类型简介
--整型数据
--实型数据
-2.3 格式输出和格式输入
-2.4 运算符和表达式
--运算符和表达式
-2.5 结构化程序设计入门
-练习题
-3.1 为什么要用选择结构解决问题
-3.2 如何正确表示选择结构中的条件
-3.3 用if语句及if语句嵌套实现选择结构
-3.4 用switch语句实现选择结构
-练习
-4.1 循环的引入
-4.1 循环的引入--作业
-4.2 用while语句实现循环
-4.3 用do-while语句实现循环
-4.4 用for语句实现循环
-- 用for语句实现循环
-4.4 用for语句实现循环--作业
-4.5 何时需要用循环的嵌套
-4.6 如何提前终止循环和提前结束本次循环
-习题--作业
-5.1 数组类型的引入
--数组类型的引入
-5.2 一维数组的定义和初始化
-5.3 一维数组的使用
--一维数组的使用
-5.4 二维数组的定义和初始化
-5.5 二维数组的使用
--二维数组的使用
-习题--作业
-6.1 什么是指针
--什么是指针
-6.2 指针类型及相关概念
-6.3 指针变量的定义、赋值与使用
-6.4 指针的运算
--指针的运算
-6.5 指针与一维数组
--指针与一维数组
-6.6 指针的指针
--指针的指针
-6.7 指针与二维数组
--指针与二维数组
-习题--作业
-7.1 为什么要自定义函数
-7.2 函数的定义
--函数的定义
-7.3 函数的调用
--函数的调用
-7.4 函数参数的传递
--函数参数的传递
-7.5 函数的嵌套调用和递归调用
-7.6 变量的作用域和存储类型
-习题--作业
-8.1 字符串的存储及输入输出
-8.2 系统字符串处理函数
-8.3 自定义字符串处理函数
-习题--作业
-9.1 结构体类型的定义
--结构体类型的定义
-9.2 结构体变量及指针变量的定义及使用
-9.3 结构体变量和指针变量作函数的参数
-9.4 结构体数组的定义和使用
-9.5 共用体类型和枚举类型
--共用体和枚举类型
-习题--作业
-动态内存分配--习题
-习题--作业