C语言程序设计 第2章G语言基础 八此京故太受计算机系
第2章 C语言基础 北京科技大学 计算机系 C 语言程序设计
本章主要内容 ●本章介绍C语言的基础,包括: 数据类型 运算符和表达式 均是程序设计的基本知识 ●为什么讨论这些知识? 通常程序要对数据进行操作处理: 处理的对象是数据 通过运算符和表达式进行操作 2021/2/24
2021/2/24 本章主要内容 2 ⚫ 本章介绍C语言的基础,包括: – 数据类型 – 运算符和表达式 ⚫ 均是程序设计的基本知识 ⚫ 为什么讨论这些知识? 通常程序要对数据进行操作处理: – 处理的对象是数据 – 通过运算符和表达式进行操作
例如 【例21】计算圆的面积,半径为5cm。 程序如下 例jc21 main( i float r, area; r=5; area:3.14Frr printf (%fn", area); 运算结果是输出圆的面积:78.500000 程序中用到的数据:r、area、5、3,14 对数据进行的运算:*、= 2021/2/24
2021/2/24 例如: 3 【例2.1】计算圆的面积,半径为 5 cm。 程序如下: main( ) { float r, area ; r=5 ; area=3.14*r*r; printf ("%f\n ", area) ; } 运算结果是输出圆的面积:78.500000 程序中用到的数据:r、area、5、3.14 对数据进行的运算:* 、= 例jc2_1
分析 涉及数据类型 的基本知识 计算机操作处理时,要完成以T⊥T 在内存中给半径r和运算结果area开辟存 储空间,存放它们的值。应该留多大的地 方来存放它们的值? ●数据5和3.14与r、area不同,它们是在 编写程序时就给出确定的值,在运算过程 中不会改变。这样的数计算机怎么处理? ●对数5和小数3.14,计算机存放时是否 有区别? 2021/2/24
2021/2/24 分析: 4 计算机操作处理时,要完成以下工作: ⚫ 在内存中给半径 r 和运算结果 area 开辟存 储空间,存放它们的值。应该留多大的地 方来存放它们的值? ⚫ 数据 5 和 3.14 与 r 、area 不同,它们是在 编写程序时就给出确定的值,在运算过程 中不会改变。这样的数计算机怎么处理? ⚫ 对整数 5 和小数3.14 ,计算机存放时是否 有区别? 涉及数据类型 的基本知识
C语言的数据类型 本章讨论 基本类型数据) 整型 字符型 基本类型实型浮点型)单精度型 空类型 双精度型 C数据类型 数组类型 构造类型」结构体类型 共用体类型 枚举类型 指针类型 2021/2/24
2021/2/24 5 C语言的数据类型 C数据类型 数组类型 结构体类型 共用体类型 枚举类型 整型 字符型 实型(浮点型) 空类型 单精度型 双精度型 基本类型 指针类型 构造类型 本章讨论 基本类型数据
2L1整型数据 1.整型数据的类型 基本整型数据int,分配2Byte 短整型数据 short int,分配2Byte 长整型数据 long int,分配4Byte 整型数据均以二进制补码形式存储 向氨; 多什要求周并? 晶何成函? 2021/2/24
2021/2/24 6 2.1.1 整型数据 1.整型数据的类型 – 基本整型数据 int ,分配 2 Byte – 短整型数据 short int,分配 2 Byte – 长整型数据 long int,分配 4 Byte 整型数据均以二进制补码形式存储 问题: 为什么要采用补码? 如何表示?
计算机中、负数的表示 例如:109=(1101101)2 要区别:+109和-109 方法是:将符号也数码化 即:正的符号+用0表示 负的符号-用1表示 计算机中的数表示方法是 符号位+二进制数值以8bt为例) 109+1101101→01101101 109→-110110111101101 2021/2/24
2021/2/24 7 计算机中正、负数的表示 例如:109 =(1101101)2 要区别:+109 和 -109 方法是:将符号也数码化 即: 正的符号 +用 0 表示 负的符号 -用 1 表示 ∴ 计算机中的数表示方法是: 符号位+二进制数值(以 8bit 为例) +109 → +110 1101 → 0110 1101 -109 → -110 1101 → 1110 1101
向题:计算机计算复类化 8 例如计算:(-19)+(+22) 10010011+00010110 需要判断符号是否相同 如果相同,结果符号不变,并进行绝对值相加 如果不同,结果取绝对值大的数的符号,并进 行绝对值相减 解决的方法是: 使用反码或补码的表示方法(按前述 表示的编码称为原码),即能将减法律 转换为加法。 2021/2/24
2021/2/24 问题:计算机计算复杂化 8 例如计算: (-19)+(+22) 1001 0011 + 0001 0110 解决的方法是: 使用反码或补码的表示方法(按前述 表示的编码称为原码),即能将减法一律 转换为加法。 需要判断符号是否相同: • 如果相同,结果符号不变,并进行绝对值相加 • 如果不同,结果取绝对值大的数的符号,并进 行绝对值相减
原码、反码和补码 正数:原码、反码、补码相同 符号位为0,数值为对应的二进制数。 +109 [01101101原=[01101101反=[01101101补 ●负数: -原码符号位为1,数值为绝对值的二进制 数 109110101原 反码符号位为1,数值为绝对值的二进制 数各位变反。 10910010010反 补码符号位为1,数值为绝对值的二进制 数各位变反加1。10910010011、产a
2021/2/24 原码、反码和补码 9 ⚫正数:原码、反码、补码相同 – 符号位为0,数值为对应的二进制数。 +109 [01101101]原 = [01101101]反 = [01101101]补 ⚫负数: – 原码符号位为1,数值为绝对值的二进制 数。 -109 [11101101]原 – 反码符号位为1,数值为绝对值的二进制 数各位变反。 -109 [10010010]反 – 补码符号位为1,数值为绝对值的二进制 数各位变反加1。-109 [10010011]补
2.有符号和无符号整型数据 10 有符号的整型数据 signed int 无符号的整型数据 unsigned int 区别是将最高位看作符号位还是数据位 例如:11101000 作为有符号数使用时,最高为符号位 为负数,值是:-88(再求一次补) 作为无符号数使用时,最高为数据位 为无符号的数,值是:65448 2021/2/24
2021/2/24 10 2. 有符号和无符号整型数据 – 有符号的整型数据 signed int – 无符号的整型数据 unsigned int 区别是将最高位看作符号位还是数据位 例如: 1111 1111 1010 1000 • 作为有符号数使用时,最高为符号位 为负数,值是:- 88(再求一次补) • 作为无符号数使用时,最高为数据位 为无符号的数,值是:65448