2010年8月27日星期五

ubuntu 安装小记

从来没有想到ubuntu的安装会这么简单。


像大多数人一样我之前用的是xp系统,在安装ubuntu之前不想离开xp,何况电脑上还有大量数据,迁移起来会是不小的工程,于是就想着先把E盘分为两个盘,然后在F盘上安装ubuntu。下面是今天安装的过程。



  • 1. 在google上搜索并下载了两个磁盘分区软件,准备把E盘的空闲空间分为F盘,结果折腾了有一个多小时都没有成功,分区软件运行一会就没反应了,试了几次都是这样,E盘系统也有些损坏,害我用xp自带的文件系统修复命令修复了一遍,幸亏E盘数据没有丢失。看来这个方法行不通。

  • 2. 在网上搜索了大量xp系统上安装ubuntu的文章,说的都比较简单,于是就想着不管那么多了,直接在E盘上安装算了,如果数据丢失了也不要紧,反正都是电影音乐图片之类的文件。

  • 3.从网上下载了ubuntu-10 iso镜像文件 和 一个免费刻盘软件BurnAware Free 并刻盘。

  • 4.电脑光盘启动,接下来就是ubuntu非常人性化的图形安装界面,每一步都非常简单,选择语言、选择时区、选择键盘方式。

  • 5. 最关键一步的是选择分区那一步,选择自定义分区,然后选择E盘,增加一个不做任何操作的分区,ubuntu会自动将E盘以前的数据迁移. 接下来增加一个2G的邏辑分区给交换空间,然后增加一个20G的主分区并选择EXT4日志文件系统.

  • 6. 就是这些了,接下来按照ubuntu默认安装就行了.

  • 7.安装完成后进入ubuntu, 你会惊讶地发现,在ubuntu里面竟然可以查看并修改之前xp上面的文件.


所以,所以这么简单,快迁移到ubuntu上面来吧,一样有图形用戶界面,最关健的是速度飞快.

关于编程中double类型的比较

相信很多人编程的时候都会像下面这样比较两个double类型吧:


double a=1/2, b=0.5;

if(abs(a-b)<1e-6)
{
cout<<"a==b";
}


当然这个是可以的,但是为什么不直接用 if(a==b) 这样子呢,因为书上好像说过不能直接用等号比较double类型,因为double在计算过程中有精度损失。

其实是我们理解错了,书上说的是在复杂的计算过程后,比如 double result = 3/7/5*7*5,在这之后,resule == 3 可能不一定成立,因为result可能等于2.999999999。但是如果我们仅仅是比较两个简单的double类型,那么完全可以用等号(==),比如 最开始的if表达式可以写成if(a==b),这样没有任何问题的。假如a==b不能比较,那a>b,a<b等也不能比较了,显然不是这样的。

2010年8月24日星期二

2010年1月12日星期二

C++ 命名空间 变量声明 定义

终于明白了C++的命名空间中变量声明的问题 正确方式为在头文件中声明如下: namespace A { extern int a;} 在cpp文件中定义如下:namespace A{int a=100;}

C++ 编码转换 多字节字符 宽字符

C++ 中可用的字符编码总体上说有两种: 一种为多字节字符, 如Ansi编码,每个汉字由2个char 确定,或者utf-8编码,每个汉字由三个char 确定。另一种为宽字符编码,每个汉字直接由1个short(wchar_t)确定。


自己利用两个Win32 API函数写了两个用于编码转换的函数



//编码转换

#include

#include

//UTF8编码转换为Ansi编码
std::string & Utf8ToAnsi(std::string &scr, std::string &des)
{
size_t n = scr.size()*2;
wchar_t *sl = new wchar_t[n];

char *sm = new char[n];
//多字节(UTF8)编码转换为宽字节编码
MultiByteToWideChar(CP_UTF8,0,scr.c_str(),-1,sl,n);

//宽字节转换为多字节(Ansi)编码
WideCharToMultiByte(CP_ACP, 0,sl, -1,sm, n,NULL,0);

des = sm;
delete []sl;
delete []sm;

return des;
}

//Ansi编码转换为Unicode(Utf16)编码
std::wstring & AnsiToUtf16(std::string &scr, std::wstring &des)
{
size_t n = scr.size();

wchar_t *sl = new wchar_t[n+1];

MultiByteToWideChar(CP_ACP,0,scr.c_str(),-1,sl,n+1);

des = sl;
delete []sl;

return des;
}