20141211

来源:互联网 发布:拍立得效果软件 编辑:程序博客网 时间:2024/05/18 03:43

C++

vc6  将fstream改为fstream.h后
出现错误:ambiguous symbol
命名冲突、
原因:在最开始using namespace std;使用了std命名空间 。
 fstream.h在旧的标准C++中使用。新标准中用fstream fstream是新标准的C++头文件,符合标准的C++开发环境使用这个头文件。还带有命名空间:std
现在标准C++为了和C区分,使用了命名空间std; .h不在使用了。vc6 可以使用 .hvs2008 已经不能使用了 .h
---------------------------------------------------------------
<fstream.h>支持ios::nocreate和ios::noreplace标记。<fstream>库不支持这些标记。容易仿制它们的功能。 

文件的重定位 

每一个文件对象都有一个逻辑指针以指向文件中一定的位置偏移量。你可以通过调用seekp()成员函数来指定逻辑指针到文件中的任一位置,seekp() 成员函数通过指定的位置偏移量实现文件中重新定位。在下面的范例中,程序定位到第10字节的文件位置,然后调用tellp()来输出新的位置: 

ofstream fout("parts.txt"); 
fout.seekp(10); // move 10 bytes ahead from beginning 
cout<<"new position: "<<fout.tellp(); // display 10 

seekp()成员函数还有另一个赋值方式,即将文件偏移方向作为第二个变量。例如,这个函数可以从当前位置向后移动2个字节到新的位置: 

fout.seekp(-3, ios::cur); 

你还可以使用以下的标记指定文件位置的方向: 

ios::beg // 文件开始的位置 
ios::cur //当前位置,比如:ios::cur+5 
ios::end // 文件末尾的位置 
------------------------------------------------------------------------
ASCII一个英文字母,数字-----占7/8字节,就是7个2进制位,第八个有其他用,比如奇偶校验,因此可以算占一个字节。(8个Bit位) 一个中文字-------占二个字节整数要根据类型,一般是极其的字长。比如16位机整数就是16位Bit,两个字节。32位机就是4字节。还有int64类型的整数。至于实数在C中,有32位(float)和64位(double)之分。其他语言中有类型80位的,叫扩展精度实数.主要是在cpu内部的扩展精度实数寄存器,是80位的。保证在double实数运算是不损失精度。
------------------------------------------------------------------------
float与double的范围和精度

1. 范围
  float和double的范围是由指数的位数来决定的。
  float的指数位有8位,而double的指数位有11位,分布如下:
  float:
  1bit(符号位) 8bits(指数位) 23bits(尾数位)
  double:
  1bit(符号位) 11bits(指数位) 52bits(尾数位)
  于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。
  其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
  float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

3.40E+38是指数,即3.40 x 10的38次方,  +38强调指次方的指数是正数。

2.  精度
  float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
  float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
  double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位



0 0
原创粉丝点击