Lecture3一C数据类型 绳伟光 微纳电子学系 上海交通大学 2017-02-28 2aC 1/43
Lecture 3 — C 数据类型 绳伟光 微纳电子学系 上海交通大学 2017-02-28 1 / 43
内容 数据类型的概念 C数据类型 3 C常量/变量声明的语法 口回之年三, 2/43
内容 1 数据类型的概念 2 C 数据类型 3 C 常量/变量声明的语法 2 / 43
内容 数据类型的概念 2 C数据类型 SC常量/变量声明的语法 口4之,年三,2 0a0 3/43
内容 1 数据类型的概念 2 C 数据类型 3 C 常量/变量声明的语法 3 / 43
数据类型概念的引入 硬件处理的只是逻辑信号0/1,并无数据类型的概念! 10...010 11...010 R=A+B R 11...111 引入数据类型是人的需求! 4/43
数据类型概念的引入 硬件处理的只是逻辑信号0/1 ,并无数据类型的概念! 引入数据类型是人的需求! 4 / 43
C运算与数学运算的对比 C语言 数学 int x,y; f=x+y int f; 令x=1, y=2 读多少个cel? f=1+2 f=x+yj =3 X memory 5/43
C 运算与数学运算的对比 5 / 43
内存(RAM) ·计算机的Memoryi可以理解为一个一定长度的线性数组 。bit:位,1bit可理解为处于0/1状态的一根信号线 。Byte:比特,1Byte=8bit,为了方便而设立 。内存大小:KB、MB、GB、TB 6/43
内存 (RAM) 计算机的Memory可以理解为一个一定长度的线性数组 bit:位,1 bit 可理解为处于 0/1 状态的一根信号线 Byte:比特,1 Byte = 8 bit,为了方便而设立 内存大小:KB、MB、GB、TB 6 / 43
数据类型与冯诺依曼模型关系 ●冯诺依曼模型以存储器为核心 ·计算过程中的所有数据,都要思考来自哪里,流向何处 。即使对RISC处理器,数据来自寄存器,但寄存器中数据依然 需考虑来源/去向 ·数据可能存在的位置 ●只读存储区:ROM/RAM的只读部分(C常量) ·可读写存储区:RAM的可读可写部分(C变量) ●指令内部:立即数(C常量) 31 0 INST. 操作码 结果寄存器 立即数:1 立即数:2 7/43
数据类型与冯诺依曼模型关系 冯诺依曼模型以存储器为核心 计算过程中的所有数据,都要思考来自哪里,流向何处 即使对RISC处理器,数据来自寄存器,但寄存器中数据依然 需考虑来源/去向 数据可能存在的位置 只读存储区:ROM/RAM 的只读部分 (C 常量) 可读写存储区:RAM 的可读可写部分 (C 变量) 指令内部:立即数 (C 常量) 7 / 43
数据类型的意义 数据类型是软件层次的概念,隐含了操作时的协议及约束! 相同美型 不同美型 美型转换 Bad sheep 2aC 8/43
数据类型的意义 数据类型是软件层次的概念,隐含了操作时的协议及约束! 8 / 43
变量的概念 ●表示RAM中某个位置数据的代号,可被赋值 ●使用前需要先声明 ·类型+名称:inta; 。类型+[名称+逗号]s:inta,b,c,pi; o 声明时初始化:int pis=3; 。混合:inta,b=1,pi=4,c; C99/C11要求编译器识别内部标识符长度63个字符,外部标识 符长度31个字符;以前的标准为31/6个字符!所以推荐用描述 性长变量名称! 9/43
变量的概念 表示 RAM 中某个位置数据的代号,可被赋值 使用前需要先声明 类型+名称:int a; 类型+[名称+逗号]s:int a, b, c, pi; 声明时初始化:int pi=3; 混合:int a, b=1, pi=4, c; C99/C11要求编译器识别内部标识符长度63个字符,外部标识 符长度31个字符;以前的标准为31/6个字符! 所以推荐用描述 性长变量名称! 9 / 43
C数据类型及变量声明示例 78 79 sys_call 6 81 PUBLIC int sys_call(call_nr,src_dst,m_ptr) int call_nr; /system call number and flags * 83 int src_dst; /src to receive from or dst to send to * 4 message *m_ptr; /pointer to message in the caller's space 85( 86 /System calls are done by trapping to the kernel with an INT instruction. 87 The trap is caught and sys_call()is called to send or receive a message 88 *(or both).The caller is always given by 'proc_ptr'. 89 98 register struct proc *caller_ptr proc_ptr;/get pointer to caiter * int function call_nr SYSCALL_FUNC;/get system call function 92 unsigned flags call_nr SYSCALL_FLAGS;/get flags 93 int mask_entry; /*bit to check in send mask 94 int result; /*the system call's result vir clicks vlo,vhi; /virtual clicks containing message to sond * 96 97 /*Check if the process has privileges for the requested call.Calls to the 98 kernel may only be SENDREC,because tasks always reply and may not block 99 if the caller doesn't do receive(). 100 / 101 if ((priv(caller_ptr)->s_trap_mask &(1 <function)) 10/43
C 数据类型及变量声明示例 10 / 43