C语言实型数据的编码和存储
习题二(数据类型)

习题二一、选择题1.下列几个选项中,属于C语言的基本数据类型的是()。
A.整型、实型、结构体类型B.整型、实型、字符型C.整型、逻辑型、实型D.整型、字符型、数组类型2.C语言规定,标识符的命名只能由字母、数字和下划线三种字符组成,且第一个字符()。
A.必须是字母B.必须是下划线C.必须是字母或下划线D.必须是数字3.下列标识符中,合法的标识符为()。
A.6adcB._max1C.a*$bnD.123bc4.下列标识符中,不合法的标识符为()。
A. intB. _n5C. i_5abD. q5n5. 下列不合法的字符常量是()。
A.‘a’B.’\”’C.’\n’D.”a”6.下列不合法的字符串常量是()。
A.‘abc’B.”abc”C.”dfb345”D.””7.下列不合法的转义字符是()。
A. ‘\\ ’B. ‘\t’C. ‘\x6a ’D.’\89’8.下面四个选项中,均是不合法的转义字符的选项是()。
A. ‘\’’‘\t’‘\’B. ‘\1234’‘\018’‘\x3h’C. ‘\n’‘\16’‘\”‘D. ‘\x8a’‘\&’‘\101’9.下列整型常量中,不合法的是()。
A.89B. -16C. 0x4bD.066810.下面四个选项中,均是不合法的整型常量的选项是()。
A. -0f1 018 2e5B. 25 0xf3 3.5C. 065 -54 -0a4D. 013 0xk5 -06911.下列实型常量中,不合法的是()。
A. 0.0B. .123C. 123D. 2.3412.下列实型常量中,合法的是()。
A. e3B. 2e4.3C. –e4D. 2e-413.下面四个选项中,均是不合法的实型常量的选项是()。
A. 3e5.4 0.0 2e5B. e5 5e2.5 68C. 3.14 2e-4 123e-5D. 0.98 -e-3 123e14.在C语言中,int、char和short 三种类型数据在内存中所占用的字节数()。
C语言学习第二章数据类型

基本整型:表示的范围为0X0~0XFFFF。
2.4.2 整型变量
1.整型变量在内存中的存放形式
以二进制补码的形式存放。
正数:最高位为0,其余各位是该数的二进制表示 负数:最高位为1,其余各位是该数绝对值的二进制
再按位取反加1
2. 整型变量的分类
放一个字符。
下面是对c1、c2赋值: c1=‘a’;c2=‘b’; (实际上其内存中存放的是该字符的ASCII码)
字符变量的初始化,如:char c1=‘a’,c2=‘b’;
2.5.3 字符数据在内存中的存储形式及其使用方法
将一个字符常量放到一个字符变量中,实际上是将该字 符的ASCII代码以二进制形式放到存储单元中。
无符号型:(只能存放0和正整数) ① 基本整型:类型说明符为unsigned int或unsigned
在内存中占2个字节 取值范围为0~2161,即0~65535。 ② 短整型:类型说明符为unsigned short (int) 所占字节和取值范围均同基本整型。 ③ 长整型:类型说明符为unsigned long (int) 在内存中占4个字节 其取值范围是0~2321 即0~4294967295
实型常量也称为实数或者浮点数。 实型常量不分单、双精度,都按双精度double型处理,其有 效位数为(15~)16位。
实型常量的表示方式有:
(1)十进制小数形式
小数形式由数字0~ 9和小数点组成。
当某浮点数整数部分或小数部分为0时,0可以省略,但小 数点不可省略。
例如:
0.0 , .25 ,5.789 ,0.13 ,5.0 , 300. 267.8230 , 123. 等均为合法的实数。
C语言常量的类型

C语言常量的类型C语言常量的类型在C语言中,其值不能被改变的量称为常量。
常量有5种类型:整型常量、实型常量、字符常量、字符串常量和符号常量。
下面一起来详细看看!(一)数值转换数字的四种表现形式:①:二进制:所有数字由0,1构成,逢二进一,二进制数中不会出现2.。
例:110101②:八进制:以数字0(注意不是以字母O,o)开头,所有数字由0~7构成,逢八进一,八进制数中不会出现8。
例:0112,0123,077等③:十进制:所有数字由0~9构成,逢十进一,十进制数中不会出现10。
例:0,12,-15等④:十六进制:以0x或者0X(数字0加字母x)开头,所有数字由0~9,A~F(或者a~f)构成,逢十六进一(其中A、B、C、D、E、F分别代表10、11、12、13、14、15)例:0x4A、0X14c7等在计算机内部,数字均以二进制形式表示和存放,用户输入的普通十进制数字都要被计算机转换成二进制才能在计算机内部存储,同样计算机的运算结果也为二进制,一般要将其转换成十进制数再输出给用户阅读,这种转换通常由计算机自动实现。
(1)将十进制转换二进制、八进制和十六进制除法:将十进制数除以2,记录余数,得到的商继续除以2,直到商为0,然后将各次相处所得的余数从后往前逆序排列,所得余数数字序列就是该十进制数对应的二进制数。
八进制和十六进制转换方法同上。
例:十进制数13转换成二进制数的值为1101,转换八进制为015,转换成十六进制为D.(2)将二进制、八进制和十六进制转换成十进制乘积求和:将二进制的每一位从低位到高位(右边为低位,左边为高位)分别乘以20,21,22。
,然后将这些积求和。
例如:(1101)2=(13)10 (317)8=(207)10 (23E)16=(574)10(3)二进制与八进制、十六进制数之间的相互转换①:二进制转八进制:从右往左每三位一组转换成十进制数,将所得数据组合就是对应的八进制数(注意:高位不足三位补零)。
C语言——第02章数据类型1

例2.2 整型变量的定义与使用
#include <stdio.h> void main() { int a,b,c,d; unsigned u; a=12;b=-24;u=10; c=a+u;d=b+u; printf(“a+u=%d,b+u=%d\n”,c,d);
}
(4) 整型数据的溢出 例2.3 数据的溢出 #include <stdio.h> 2 void main() 3 { 4 short a,b; 5 a=32767; 6 b=a+1; 7 printf("%d,%d\n",a,b); 8 }
区分变量名和变量值是两个不同的概念
练习:为变量a和b分别赋一个实数,求
a-b
a+b
的结果.
#include<stdio.h> void main() { float a,b; scanf(“%f%f”,&a,&b); printf("%f\n",(a-b)/(a+b)); }
§2.4 整型数据
练习:
编写:定义2个单精度变量a和b,求其和存入变量sum中; 定义2个双精度变量c和d,求其积存入变量tim中,a、b、 c、d的值任意给。
#include <stdio.h> void main() { float a,b,sum; double c,d,tim; scanf(“%f%f%f%f”,&a,&b,&c,&d); sum=a-b; tim=c*d; printf(“sum=%f tim=%f\n”,sum,tim); }
“规范化的指数形式‛,即在字母e(或E)之前 的小数部分中,小数点左边应有一位(且只能有 一位)非零的数字。 一个实数在用指数形式输出时,是按规范化的指 数形式输出的。 例如: 123.456可以表示为: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 0.00123456e5 其中的1.23456e2称为“规范化的指数形式”。
C语言程序设计 第2章 数据类型

2.2常量和变量 变量名与变量值的关系:
2.2常量和变量
变量的使用:先定义后使用
变量定义的一般形式:
数据类型 变量名1,变量名2,…,变量名n;
2.2常量和变量
➢ 凡未被事先定义的,系统不把它认作变量名,这就 能保证程序中变量名使用的正确
例:varname,在使用的时候误写成vaname
➢ 在定义变量时要指定变量的类型,在编译时就能为 变量分配相应的存储单元
5
2.2常量和变量
甘草 三七 干姜 葛根
枸杞 人参 陈皮 地黄
山药 当归 谷芽 黄连
贴上标签 加以区分
用标识符给变量起名字
2.2常量和变量 变量命名规则
➢ 只能由字母(a~z,A~Z)、数字(0~9)和下划线(_)构 成
➢ 第一个字符不能为数字 ➢ 不能与关键字同名
例:a9,_a, A_num √ 9a, a*num,int ×
控制语句:控制语句用于控制程序的流程。 C语言提供三类控制语句: ➢ 选择语句 ➢ 循环语句 ➢ 转移语句。 控制语句会在第三章和第四章详细介绍。
2.7 表达式与语句
复合语句: 复合语句由一对大括号括起来的一 条或多条语句组成。 例:{
turnOn(0,3); turnOn(0,4); turnOn(0,5); turnOn(1,4); }
2.7 表达式与语句
表达式语句:表达式末尾加上“;”就构成一条 表达式语句。 例:
s = 3.14 * r * r; 就是一条赋值表达式语句。表达式语句最后的 分号是语句中必不可少的一部分。
2.7 表达式与语句
函数调用语句:函数调用语句由函数调用加分 号构成。 例:
turnOn(1,1);
C语言第02章 数据类型、运算符与表达式

回到 首页
运算符和结合性 P325,附录3
2.8 算术运算符和算术表达式
3、自增、自减运算符
自增运算符++和自减运算符--均是单目运算符, 功能是使变量的值增1或减1。其优先级高于所有 双目运算符,结合性为右结合性(自右至左)。
回到 首页
例如:++i或i++ 等价于i=i+1; --i或i-- 等价于i=i-1;
2.7数值型数据之间的混合运算
回到 首页
1、整型、实型、字符型数据之间可以混合运 算
整型(包括int,short,long)和实型(包括float,double)数据可 以混合运算,另外字符型数据和整型数据可以通用,因此,整 型、实型、字符型数据之间可以混合运算。 例如,表达式10+'a'+1.5-8765.1234*'b'是合法的。
2.9赋值运算符和赋值表达式
1、赋值运算符和赋值表达式
赋值运算符:“=”为双目运算符,右结合性。 赋值表达式:由赋值运算符组成的表达式称为赋值表达 式。 赋值表达式一般形式: 变量 赋值符 表达式 如 a=5 类型转换:将高精度的数据类型赋值给低精度的数据类 型,可能出错。
回到 首页
2.9赋值运算符和赋值表达式
2.8 算术运算符和算术表达式
3、自增、自减运算符
回到 首页
y=++x;等价于先计算x=x+1(结果x=6),再执行y=x,结果y=6。 y=x++;等价于先执行y=x,再计算x=x+1,结果y=5,x=6。 y=x++*x++;结果y=25,x=7。x++为后缀形式,先取x的值进行“*” 运算,再进行两次x++。 y=++x*++x;结果y=49,x=7。
C语言程序设计基本数据类型及运算

16
长整型 d long [int] 32
取值范围
-215~215-1 (-32768~32767 )
0 ~216-1 (0~65535 ) -231~231- 1
0 ~232-1
方括号表示可选项 int 分配2 Byte,long分配4 Byte
对整数 5 和小数3.14 ,计算机存放时是否 有区别?
2020/2/25
C语言的数据类型
基本类型
C数据类型
构造类型 指针类型
5
本章讨论 基本类型数据
整型 字符型 实型(浮点型) 空类型
单精度型 双精度型
数组类型 结构体类型 共用体类型 枚举类型
2020/2/25
2.1.1 整型数据
6
1.整型数据的类型 – 基本整型数据 int ,分配 2 Byte – 短整型数据 short int,分配 2 Byte – 长整型数据 long int,分配 4 Byte 整型数据均以二进制补码形式存储
2020/2/25
2.2 常量、变量与标准函数
16
主要内容:
– 常量 – 变量 – 标准库函数
2020/2/25
2.2.1 常量
17
在运行程序的过程中值保持不变的量
1.整型常量
– 十进制:0~9 – 八进制:0~7,以 0开头 – 十六进制:0~9,A~F/a~f,以 0x或 0X 开头
2020/2/25
分析:
4
涉及数据类型
的基本知识 计算机操作处理时,要完成以下工作:
在内存中给半径 r 和运算结果 area 开辟存 储空间,存放它们的值。应该留多大的地 方来存放它们的值?
数据 5 和 3.14 与 r 、area 不同,它们是在 编写程序时就给出确定的值,在运算过程 中不会改变。这样的数计算机怎么处理?
C语言教程第3章 数据类型、运算符与表达式

注意以下几点:
(4) 一个整常量后面加一个字母u,认为 是unsigned int型,如12345u,在内存 中按unsigned int规定的方式存放(存储 单元中最高位不作为符号位,而用来存 储数据,见图2.4(b)。如果写成-12345u, 则先将-12345转换成其补码53191,然 后按无符号数存储。
int a; unsigned int b;
一个整数(以13为例)在存储单元中 的存储情况
3. 整型变量的定义
int a,b; (指定变量a、b为整型) unsigned short c,d; (指定变量c、d为无符号短整型) long e,f; (指定变量e、f为长整型)
例3.2整型变量的定义与使用。
字符型变量用来存放字符常量,请注 意只能放一个字符,不要以为在一个字符 变量中可以放一个字符串(包括若干字符)。 字符变量的定义形式如下: char c1,c2;
c1='a';c2='b';
3.5.3 字符数据在内存中的存储 形式及其使用方法
字符的相应的ASCII代码放到存储单元中
例3.6向字符变量赋予整数。
单精度 ( float 型 占4B) 双精度 ( double 型 占8B )
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
若变量 x 的地址为 194H,则 x 在内存中的存储形式如下:
194H B4 195 H B3 196 H B2 197 H B1
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 0 1 0 0 0 0 1 0
double 型和 long double 型数据的存储形式与 float 型数据的存储 形式类似,不再赘述。
2.1.2 由编码求 f 的值
先根据编码分别求出 p 和 a 的值,然后利用公式 2-1 计算 f 的值 (一般用十进制表示) 。 设某数的编码如下:
1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
根据 b2 至 b9 8 个位的值,求得 p=121-127=-6。又因为 b10、b13、
0 1 0 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
再如 f=1 时, 由于 1=1.020, 所以, p=0, a=0, 于是 ai=0(i=1, 2, …, 23)。所以实型数 1 编码为:
0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
符号位 B1 B2 B3 B4
指数 (8 由如下公式[1] [2]表示 f=±(1+a) • 2p 2-1
其中:f 为一个单精度实型数,一般以十进制表示,符号由首位 b1 确 定,p 为指数,其值为 8 位无符号数与偏值 127 的差。a 为尾数, a=a12-1+a22-2+…+a232-23,其中,ai=0 或 1(i=1,2,…,23) 。利用公 式 2-1 可以实现数值与编码的转换。 公式 2-1 的几种例外情况: 1、指数编码全部是 1,而尾数编码全部为 0 时,表示±∞; 2、指数编码全部是 1,而尾数编码不全为 0 时,表示一个无效 数字; 3、指数编码全部是 0,而尾数编码不全为 0 时,f=±a • 2p+1 ; 4、所有编码全部为 0 时,表示数 0。
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
实际应用时,指数编码全部为 0 的 float 型数作为 0 对待。所以, float 型最小正数为 2-126≈1.1754910-38。 尾数最小值为: 2-23≈1.1920910-7。 float 型数的有效数字为 6 位。
63) 。 公式 2-2 的几种例外情况: 1、指数编码全部是 1,而尾数编码不全为 0 时,表示±∞; 2、指数编码全为 0 时,表示数 0; 3、指数编码值小于 15(000FH)或尾数编码全为 0 时,表示一 个无效数字。 另外,long double 型数的指数下限为 10-4928,在指数临界时,受 尾数的影响可能会产生其它的无效数字。 由于 20+2-1+…+2-63≈2,所以 long double 型最大数为 2216383≈ 1.18973104932。运算最小正数为 8.9082310-4928。 尾数最小值为 2-63≈1.0842010-19,long double 型数的有效数字 为 19 位。
符号位 B1 B2
…… B3~B7
B8
指数(11 位偏码)
尾数(52 位)
尾 数 最大 值为: 2-1+2-2+ … +2-52 ≈ 1 ,尾 数最小 值为: 2-52 ≈
2.220446010-16。double 型数的有效数字为 15 位。 double 型数的编码仍然用公式 2-1 确定,并且也有相同的例外情 况,式中 p 为指数,其值为 11 位无符号数与偏值 1023 的差。 a=a12-1+a22-2+…+a522-52,其中,ai=0 或 1(i=1,2,…,52) 。除数 0 的编码全为 0 外,指数编码一般既不全为 0,也不全为 1,所以,指 数 p 的值介于 -1022 与 1023 之间,最大 double 型数为 21023 ≈ 1.79769310308,最小 double 型正数为 2-1022≈2.22507410-308。 double 型数与 64 位编码之间的转换方法与 float 型数据情形相同。
b15 3 个位的值为 1, 其余 20 个位的值为 0, 故得 a=2-1+2-4+2-6=0.5781, 由 b1=1 知该数为负数。所以,以上编码表示的实型数 f 为: f=-2-61. 5781=-0.02456820312。 由于 2-1+2-2+…+2-23≈1,所以,按如上方式编码可表示的最大 float 型数为 22127≈3.402821038,编码为:
0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
当指数编码全为 0 时,p=-127,若尾数编码不全为 0,则公式 2-1 形 如 f=a • 2p+1,因此,最小正数为 2-232-126=1.401310-45 ,其编码为:
4 结
语
综上所述并结合在 P4 微机上 Turbo C2.0 环境中的实验结果,归 纳出实型数据的相关属性如下表:
数据类型 float double long double 编码 位数 32 64 80 指数 位数 8 11 15 指数取 值范围 -126~127 -1022~1023 -16368~16383 有效 数位 6 15 19 数值范围(近似) ±1.1754943510-38~±3.402821038 ±2.22507410-308~±1.79769310308 ±8.9082310-4928~±1.18973104932
2.3 long double 型数据
long double 型数据码长十个字节 80 位,b1 至 b80。其中,b1 为符 号位,0 表示正数,1 表示负数。b2 至 b16 共 15 位为指数的偏码,偏 值为 16383。b17 至 b80 共 64 位为尾数编码,分别表示 20,2-1,2-2,…, 2-63 各位的数码。 long double 型数据的编码方式如下图。
3 实型数据的存储
实型数据的存储和整型数据方式相同, 以字节为单位, 逆序存放。 以下以 float 型数据为例说明。 若有 float 型变量 x=106.25,由公式 2-1,可确定 x 的编码为:
B1 B2 B3 B4
0 1 0 0 0 0 1 0 1 1 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2.2 double 型数据的编码
double 型数据的码长为八个字节 64 位,分别记为 b1,b2,…, b64。其中,b1 为符号位,0 表示正数,1 表示负数。b2 至 b12 共 11 位 为指数的偏码,偏值为 1023。b13 至 b64 共 52 位为尾数编码,分别表 示 2-1,2-2,…,2-52 各位的数码。double 型数据的编码方式如下图。
以上数据主要是通过实验获得, 有些与 float.h 或 values.h 头文件 定义的值相同, 有的则不同, 编码的理论值与实验数据也有一定差异, 不同的 C 编译系统也会有不同的结果,实际应用时,应区别对待。
参考文献
[1] 尹彦芝.C 语言高级实用教程.北京:清华大学出版社,1992 [2] 蒋长景.科学计算和 C 程序集.合肥:中国科学技术大学出版社,1998 [3] 徐金梧等.Turbo C 实用大全.北京:机械工业出版社,1996 [4] 谭浩强.张基温等.C 语言程序设计教程.北京:高等教育出版社,2001
2.1.1 由数值 f 确定其编码
先由 p 的值确定指数编码。当 f≥2 时,将 f 连续被 2 除,直到 商 a 满足 2>a≥1,p 的值为除法运算的次数;当 f<1 时,将 f 连续被 2 乘,直到积 a 满足 2>a≥1,p 的值为负数,其绝对值为乘法运算的次 数。将无符号数 127+ p 转换为 8 位二进制码,即为指数的编码。 再由 a 的值确定尾数编码。 由于 a= a12-1+…+a232-23, 其中 1>a≥0。 采取乘 2 取整的方法,分别求出 a1,a2,…,a23 的值。 例如 f=100(>2)时, 将 100 连续被 2 除 6 次, 商为 1.5625, 指数 p=6, 将 133(127+6)转换成 8 位无符号二进制数 10000101, 即得到了 b2 至 b9 8 个位的编码。对纯小数 0.5625 采取乘 2 取整,求得 a1= a4=1,a2=a3= a5=…= a23=0,由此,得到 b10 至 b32 23 个位的编码。因为 100>0,所 以,b1=0,故实型数 100 的编码为:
C 语言实型数据的编码和存储
周恒忠
(皖西学院 计算机科学与技术系,安徽 六安 237012)
摘 要: C 语言数据类型丰富, 而数据类型的确定在程序设计 中又至关重要,有必要对各种类型的数据进行深入细致的研究。在 Turbo C 2.0 中,实型数据包括 float 型、double 型和 long double 型三 种,编码长度分别为 4B、8B 和 10B,从左至右,第一位为数据的符 号位,接下来为指数的偏码,位数分别为 8b、11b 和 15b,剩余部分 为尾数的编码。存储时以字节为单位将编码逆序存放。通过转换公式 可以轻松地实现数值与编码之间的转换, 在实验的基础上归纳出了实 型数据的相关属性。 关键词:C 语言;实型;编码;存储。
The coding and storage of the real type data in C programming language.