夏青虫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

正在看《C Primer Plus》,记下一些知识点:

  • 位(bit),字节(byte),字(word)

1 bit只容纳1或者0;

1 byte = 8 bit,能表示0~255;

根据机器不同,我理解像通常说的32位和64位,指的就是1 word;

  • 字符(char)

char类型保存在8 bit里,标准的ASCII范围是0~127,其实7 bit就够了;

char也可以分为signed char和unsigned char;

printf对应的是%c

C将字符常量视为int类型而非char类型,例如:

char grade = 'A' 
//将'A'作为数值65存到32bit单元中,赋值后将65存到8bit单元中
  • int类型

1. c保证int至少有16bit长,unsigned定义无符号整数

2. 可移植的类型:inttypes.h,可以确切的定义int类型有多少位,没有细看,需要时再说

  • float类型

1. float类型必须至少能表示6(8本机)位有效数字,取值范围10e-37~10e37,通常用32bit存一个float数,其中8bit表示指数及其符号,24bit表示非指数部分及其符号。

2. double类型至少能表示10(15本机)位有效数字,用64bit存一个double数。

3. 默认情况下,编译器将浮点常量当作double类型,例如:

float some = 4.0 * 2.0
//4.0和2.0被存储为double型,乘积运算使用double,结果截断为float。
//如果要将浮点常量设为float型,则写成4.0F或3.0f
//保证了计算精度,但会减慢速度。

4. 上溢和下溢,NaN(not-a-number)

上溢:大到不能表示的数,用inf或infinity代替。

下溢:指数部分存储已经达到极限了,这时只能将非指数部分右移,就损失有效数字,降低了精度。

NaN:一些非正常的计算,例如/0,asin(1.2)等。

  • printf的一个误解
float f = 1.f;
int i = 1;
printf("%d %f\n", f, i);
//使用%d显示float值不会把float值转化为int,%f与之类似。
  • printf的刷新输出

printf()函数先将内容传递给一个被称为缓冲区(buffer),然后再不断的传递给屏幕。

标准C规定在以下情况会将缓冲区的内容传递给屏幕:

(1)缓冲区满的时候;(2)遇到换行符的时候;(3)需要输入的时候;

posted on 2013-04-08 17:06  夏青虫  阅读(225)  评论(0编辑  收藏  举报