没有合适的资源?快使用搜索试试~ 我知道了~
C语言学习笔记(结合教程)
5星 · 超过95%的资源 需积分: 9 1 下载量 15 浏览量
2022-06-06
18:19:10
上传
评论 10
收藏 174KB PDF 举报
温馨提示
试读
12页
C语言学习笔记(结合教程)
资源详情
资源评论
资源推荐
1. 基本类型的赋值,转换问题。[(1)见 p80;]
(1) c中是不是也和 Java 一样,存在隐式转换和强制转换?有区别吗?
有区别。
C 中的隐式转换就是“整型提升”。C 中的“整型提升”仅指:表达式中的操作数类型
<=int 的情况下(short 和 char),提升到 int 型。
(注意:是表达式中的 char 和 short 在使用之前被转换为 int。)
>=int 型的类型的提升,被称为寻常算术转换:
寻常转换应该遵循:int – unsigned int – long int – unsigned long int – float –
double – long double 由小到大的转换规则:一个操作数类型相对另一个操作数类型
排名较低(较小),则自动转换为相对较大的类型。(数据转换按数据存储长度增长的
方向进行。)
寻常算术转换和强制转换均为“算术转换”。寻常算术转换侧重于自动转换到相对较高
的类型(如 int - float),强制转换则可人为将其转换到其他类型(如 long – int ; int -
double)。
(记住:是先转换,再执行操作。)
(记住:若某个操作符的各个操作数属于不同的类型,则除非其中一个操作数转换为
另一个操作数类型,否则操作无法进行。问:该规则是否也针对赋值操作符“=”?
不过等号右边的操作数(右值)自动转换成了左值的类型。)
(注意:以上概念是针对算术操作符而言的。算术操作符就是+ - * / %。
问:那对于其它操作符呢?尤其是关系操作符?)
(2) 不同类型操作数互相赋值时的精度变化情况:
从 int 到 float : 精度可能会降低(有点例外)
。Float 只能保证 6 位有效数字的精度(浮
点型以指数方式存储),虽然长度为 4 个字节。
在 32 位平台上,通常 int 是 4 字节长度,最多表示到 21 亿多,而 int 型是“绝对
精确”的,换句话说,就是 int 行最多可以保证 10 位十进制有效数字的精确度。而 float
只能保证 6 位有效数字的精确度,因此 int 到 float 的转换是可能丢失精度的。
比如整数“1234567899”转换成 float 后,大约是:1.23457936 乘 10 的 9 次方,
也就是从第 7 位有效数字开始已经不准确了。double 可以保证 15 位 10 进制有效数
字的精度,所以从 int 到 double 不会有这个警告。
(以上摘录自网络。)
(3) 左值与右值的注意点?
左值可以是变量或表达式,但必须能标识一个可以存储结果值的地点。
2. 位运算问题:
(1) 无符号数与有符号数左移,右移(<<,>>)的异同?
它们的左移均为逻辑移位(补 0);无符号数的右移也是逻辑移位(因为无符号数无
须担心符号位问题);但有符号数的右移方式(逻辑移位还是算术移位)取决于编
译器的类型(因而是不可移植的)。
(2) 逻辑移位与算术移位的区别?
逻辑移位补 0;算术移位(似乎只用于右移):左边移入的位根据有符号数符号位
值决定是 0 还是 1。
3. 各种数据类型的长度及注意点
(1) 整型:(长整型至少应该和整型一样长,整型至少应该和短整型一样长。)
char , signed char , unsigned char , short int , unsigned short int ,
int , unsigned int , long int , unsigned long int
其中,short int 至少 16 位,
limits.h 中说明了各种不同整型类型的特点: p30
signed unsigned
类型 最小值 最大值 最大值
字符
SCHAR_MIN (-128) SCHAR_MAX(127) UCHAR_MAX(0xff)
短整型
SHRT_MIN(-32768) SHRT_MAX(32767) USHRT_MAX(0xffff)
整型
INT_MIN
(-2147483647 - 1)
INT_MAX
(2147483647)
UINT_MAX
(0xffffffff)
长整型
LONG_MIN
(-2147483647L - 1)
LONG_MAX
(2147483647L)
ULONG_MAX
(0xffffffffUL)
整型字面值(整型字面值常量):可以是 9 种整型中的任何一种。
(2) 浮点类型:long double 至少和 double 一样长,而 double 至少和 float 一样长。
头文件 float.h 中有记录:
MAX MIN
float FLT_MAX (3.402823466e+38F) FLT_MIN(1.175494351e-38F)
double DBL_MAX
(1.7976931348623158e+308)
DBL_MIN
(2.2250738585072014e-308)
long
double
LDBL_MAX
(DBL_MAX) 或
(1.189731495357231765e+4932L)
LDBL_MIN
(DBL_MIN)或
(3.3621031431120935063e-4932L)
注:浮点数字面值总是写成 10 进制的形式,必须有一个小数点或一个指数。
(3)指针
4. static ,extern ,const
5. C 中的抽象数据类型(ADT : abstract data type)是什么?
也称“黑盒”。由接口和实现 2 部分组成。接口是公有的,一般定义在头文件中,说明用
户如何使用 ADT 提供的功能;实现是私有的,是实际执行任务的部分(实现细节对客户
不可见)。比如:可将常量或函数等的申明放在头文件中,函数的定义放在源文件中。而
这些函数还可以调用更为细节的且被定义为 static 的处理函数(static 函数对外不可见)。
具体可见例子 p125。
6. 关于提高程序效率的一些建议:
(1) 尽量使用编译时求值的表达式(如常量表达式),而减少使用运行时求值的表达式
(代价更高)。
(2) 在 for 循环里减少计数器的使用(可能的话),如下:(p148)
#define SIZE 50
int x[SIZE];
int y[SIZE];
void try()
{
register int *p1, *p2;
for( p1 = x, p2 = y; p1 < &x[SIZE]; )
*p1++ = *p2++;
}
(3) 数组操作时:使用指针往往比使用下标更有效率(但不一定);指针的效率永远不
会低于下标(理论上)。
(4) 声明为寄存器变量的指针通常比位于静态内存和堆栈中的指针效率更高。
(5) 自动变量(尤其是数组)如果在函数或代码块中经常要被初始化,可以考虑将其
设为 static,这样只需在程序开始前初始化一次。
剩余11页未读,继续阅读
挨踢程序员(不秃版)
- 粉丝: 5839
- 资源: 111
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1