2009年2月18日星期三

C语言备忘知识点

一个整常量后面加上u或U,就表示此常量为无符号数。如12345u或12345U,则计算机就会在内存里按unsigned int规定的方式来存放。

如果是-12345u,那么计算机会先将-12345转换为其补码形式53191,然后再按无符号数形式存放。
如果一个整常量后面加字母l或L,则表示为long int型常量。

当计算机遇到一个小数,则会先将它转换成一个双精度数据存储(64位),虽然提高了精度,但这样运算速度就会降低。所以如果我们更注重运算速度,可以在小数后面加上f或F,来告诉计算机按单精度处理,不要转换为双精度数。

在不同类型数据的混合运算中,有一些隐蔽的规则:

1 char和short是必须先转换为int才可以进行运算的。
2 float一律转换为双精度型再进行运算,即使是两个float型数据相加,亦是如此。
3 如果int和double进行运算,那么int先转换成double,然后两个double进行运算
4 如果int和unsigned int进行运算,那么int要先转换为unsigned int,然后两个unsigned int进行运算
5 这些类型转换是由系统自动完成的。

在强制类型转换时,得到的是一个所需类型的中间变量,原来变量的类型不会发生变化,如(double)(x),x的类型本身不会变化。

单目运算符包括:!,~,++,–,-,(type),*,&,sizeof
单目运算符的优先级仅次于(),[],->,.这四个(并非真正意义上的)运算符。
单目运算符的结合性是自右向左。如-i++,即-(i++);如*i++,即*(i++)。

C编译系统会使用贪心法来识别运算符,如 i+++j,会被理解为(i++)+j

逗号表达式形如:表达式1,表达式2
逗号表达式的值是表达式2的值。

由于赋值运算符的优先级高于逗号运算符,所以a=3*5,a*4被理解为(a=3*5),a*4

逗号运算符基本上是优先级最最低的一个运算符,而赋值运算符基本上是排在倒数第二。(逗号全班倒数第一。赋值全班倒数第二,呵呵),你一定想知道倒数第三是谁,告诉你,条件运算符,也就是C中唯一的三目运算符"?:"。

C语言提供的关系运算符有6种:
<, <=, >, >=, ==, !=,其中前四种的优先级要高于后两种。

C语言提供3种逻辑运算符:
&&,||,!,这三种优先级各不相同,!优先级最高,&&次之,||优先级最低。而且更复杂的是,&&和||的优先级低于关系运算符,而!高于算术算符

总结起来就是:
逗号运算符<赋值运算符<||<&&<关系运算符<算术运算符<!

具有自右向左结合性的运算符都包括:赋值运算符,单目运算符和条件运算符。如a>b?a:c>d?c:d,即a>b?a:(c>d?c:d)

scanf函数会以空格来作为结束符。所以scanf("%s",str)的话,

如果输入是how are you? 那么最后str中存入的只有how。这点要特别注意。

共用体的定义为:
union 共用体名称
{
成员列表;
}变量列表;

例如:
union data
{
int i;
char ch;
float f;
}a,b,c;

共用体变量所占的内存长度是最长的成员的长度。

在引用共用体变量时应十分注意当前存放在共用体变量中的究竟是哪一个成员。
&a、&a.i、&a.ch、&a.f都是同一个地址值。
不能对共用体变量名赋值,也不能企图引用变量名得到一个值,更不能在定义共用体时对它初始化。


位段的概念非常重要,在编写网络程序常会用到。

struct packet_data
{
unsigned a:2;
unsigned b:6;
unsigned c:4;
unsigned d:4;
int i;
}data;

当然也可以不恰好占满一个字节,如

struct packet_data

unsigned a:2;
unsigned b:3;
unsigned c:4;
int i;
}data;

这样的话a,b,c会占去2字节中的前9位,而后7位会空闲下来,而i会从另一个新字节开头开始。

在引用位域时,要特别注意其最大值范围,如占2位,那么最大值为3.

位段成员的类型只能指定为unsigned int或int型。

若要强制一个域从新字节开始,那么可以这样:
unsigned a:1;
unsigned b:2;
unsigned :0;
unsigned c:3;

此时c会从一个新字节开始存储。

位段可以用%d来输出。

可以定义无名位段,表示这些位我不用:

unsigned a:1;
unsigned :2; //这两位空间不使用
unsigned c:3;

转载:写给敢做敢为的人

十律
  1、有主见,三思后再决定是否应该买进,如果是,在哪里,什么行业,哪个国家?
  2、要有足够的资金,以免遭受压力。
  3、要有耐心,因为任何事情都不可预期,发展方向都和大家想象的不同。
  4、如果相信自己的判断,便必须坚定不移。
  5、要灵活,并时刻思考到想法中可能的错误。
  6、如果看到出现新的局面,应该卖出。
  7、不时察看购买的股票清单,并检查现在还可买进哪些股票。
  8、只有看到远大的发展前景时,才可买进。
  9、考虑所有风险,甚至是不可能出现的风险,也就是说,要时刻想到意想不到的因素。

  十戒
  1、不要跟着建议跑,不要想能听到秘密讯息。
  2、不要相信卖主知道他们为什么要卖,或买主知道自己为什么要买,也就是说,不要相信他们比自己知道的多。
  3、不要想把赔掉的再赚回来。
  4、不要考虑过去的指数。
  5、不要躺在有价证券上睡大觉,不要因为期望达到更佳的指数,而忘掉他们,也就是说,不要不做决定。
  6、不要不断观察变化细微的指数,不要对任何风吹草动作出反应。
  7、不要在刚刚赚钱或赔钱时做最后结论。
  8、不要只想获利就卖掉股票。
  9、不要在情绪上受政治好恶的影响。
  10、获利时,不要过分自负。

2009年2月17日星期二

一套键盘鼠标控制多台电脑

使用一套键盘鼠标控制多台主机, 在某些场合非常有用,比如:
1. 你有多台电脑需要同时操作;
2. 现场调试设备;
3. 多设备操作时,比如:网管, 比如:操作众多的医疗设备.
4. 参展时使用;
5. 耍酷;

以前有硬件解决方案,不过都售价不非. 软件实现也有:远程桌面,
不过用起来都不方便,且慢. 今天终于碰到一个横空出世的软件了:Synergy.
现在很多人都会有两台电脑。一台台式机,一台笔记本,一起工作时,桌面上的两套键鼠很容易把桌面摆乱,把自己搞混.
通过这个软件, 你就可以通过一套键鼠控制两台电脑,简单方便!
不仅如此,Synergy 还能在两台电脑间共享剪贴板,真正是把两台电脑当成一台用。

安装:
Synergy有windows, MacOS, Unix三种版本.
ubuntu源里面有Synergy, Quicksynergy是synergy的图形前端, 安装
QuickSynergy,就省去看 Synergy 的命令参数了。
Synergy 的主页: http://synergy2.sourceforge.net/
QuickSynergy 的主页: http://quicksynergy.sourceforge.net/

使用:
Server端: 用哪台电脑的键盘,哪台电脑就充当Server;
clent 端: 不用哪台电脑的键盘,哪台电脑就是clent;

Synergy 的界面相当简单,你只需要知道Server的
IP,和被控方Client的主机名。现在支持一台电脑控制4台电脑,有"上下左右"4个方位可以选择,如果选择"左",那么鼠标就通过你主机电脑的左边切换到你的client电脑,
其他方向雷同.

Server端: 在Server电脑上安装好 Synergy 之后,可以运行
QuickSynergy,在正确位置写上client电脑的主机名,然后点击下面的 Execute,就
OK 了,QuickSynergy 会自动缩小在任务栏中。
client端:启动Synergy,填入Server
IP,就会连接到主机,连接成功后,试试用你的Server主机键鼠控制两台电脑吧!

让sudo无须再输入密码

修改/etc/sudoers
sudo vi /etc/sudoers
把/etc/sudoers里面最后一行
%admin ALL=(ALL)
改为
%admin ALL=(ALL) NOPASSWD: NOPASSWD: ALL
然后强制保存退出就OK
以后sudo不在需要密码

2009年2月16日星期一

转贴: APUE, A Great Book

From:http://blog.solrex.cn/go/622676.html

这两周是选课试听期,还没有正式开始上课,所以有点空闲就翻了翻 UINX 环境高级编程(Advanced Programming in the UNIX Environment, 2e),看了七八章,发现这本书真的是无愧于"UNIX编程圣经"的称号。书中对编程中可能遇到的问题讲解得非常系统和详细,尤其当看到自己以前遇到过问题的地方时,简直就有一种顿悟的感觉,就想感叹一句"哦,原来如此!"。

我平常在写程序时,遇到问题总是求助于Google。对那些讲编程技巧的书向来不怎么感冒(尤其是中国人写的),总觉得那种书根本不适合花时间仔细看一遍。这种问题驱动式的学习方式固然在解决某一特定问题时显得快捷高效,但是也往往受限于一叶障目不见泰山的困境。在解决了某一问题之后,对其它同类问题没有足够关注,导致再遇到类似问题时仍需要去搜索答案。

问题驱动式的学习方式会导致对问题的了解不够系统和深入,但如果仅仅拿本大部头慢慢翻完的话,又会枯燥无味,而且体会也不深。我觉得读编程书的最好方法就是,先有一定量的实践,再去看书,而且要保持对书中习题和代码的练习量。有时候不妨先看实例代码再看正文解释,如果代码看得懂,看作者的解释是否和自己理解一样;如果代码看不懂,就会加深对正文的注意度。而且有时候读那些入门级的教科书,不妨只看代码。

当然,在编程的时候,桌子上应该有几本经典图书当作手册来参考,不时地重读一下某些章节会很有好处。像 APUE,我就觉得非常适合作为案头书,做 Linux/Unix开发的程序员买一本看看绝对不会失望。

毕业生必须知道:干部身份、三方协议、派遣证

本文系转贴,原帖地址为:http://cnc.byr.edu.cn/wForum/disparticle.php?boardName=Job&ID=522504&pos=564
原帖作者为Tritree (嚎月贪狼),感谢原帖作者。
===
[正文开始]

学校里关于毕业生的会也已经开了一大堆,耳朵也长膙了,嘴唇也磨薄了,很多人随大流听听看看,可真正重要的一些东西相信有很大一部分人却没有搞懂。如果不
信,你可以问问自己,什么叫三方协议?三方协议和谁签?有什么用?户口和三方又有什么关系?当一个个问题逐一提出来时,你可能已经开始觉得发虚。

在这里,我想简单的说一说我目前所知道的关于这方面的一些问题,相信肯定有很多不全面的地方,但至少相信可以帮帮你。

首先是大学毕业后的人生基本规划(本处所指为非在职考研、考博、考公务员等同学):

大学毕业后的一年最为关键,举例如2008年6月毕业7月正式工作者,其从08年7月到09年7月这一年是对其人生的基本规划最为重要的一年,原因涉及三项——三方协议、报到证(派遣证)、干部身份。

关于三方协议:

什么叫三方协议?网上答案都有,随便查查就知道了。但再深一些说呢,肯定有人不知道了。

三方协议,简单的讲就是学校、学生本人、工作单位三方就毕业生离校后就业工作落实所签署的一份协议书,很多人知道的是:三方协议过去必须签,但现在不一
定,三方签了只是学校统计就业率的一个参考指标。三方和派遣证挂钩,但我没有留京户口,单位签三方就要解决你的户口,所以现在单位都不签三方了,尤其是私
企等等。没错,上边说的都对,所以有些朋友们就把三方协议放弃了,而只是找到工作,自己去做个打工者,然后只考虑劳动合同。

那么究竟三方协议背后究竟还有什么呢?其实三方的背后还隐藏着很多。

如果说到三方协议,那么必需提到的就是派遣证与干部身份。

三方协议作为国家统计大学生就业率的一个根据,同时也是国家派遣证发放的一个证明。只有你签署了三方协议,拿回学校,学校才会在你毕业后将派遣证发给你,
而你拿着派遣证到你工作的单位报道,就此开始计算工龄,而你也就拥有了干部身份(每年基本6月25日毕业,所以6月18日前必需将三方交到学校)。

派遣证(报到证):

派遣证一式两份,一份是派遣证,另一部分是报到证。派遣证在你毕业后将放入你的档案,由国家直接打到你的单位(档案属国家机密,不允许个人持有。如果你的
用人单位拥有档案保存资格那么你的档案就放在单位,如果没有,那单位会掏钱将你的档案放在人才市场类的档案保存处。你过你没工作,那你的档案就直接打回原
籍)。而报到证则交由你手自行保管。在这里必须要重点说的是,很多人在毕业后没多久就把报到证丢了,而当若干年后单位希望将你提干要求出示报到证时,很多
就没有了,而只能再跑回某地去重新开证明,这时的证明可就没那么好开了,所以还是劝君保管好。

干部身份:

在中国社会体系中,公民分三中身份:农民、工人、干部。农民归农业部管理,工人归劳动局管理,而干部归人事局管理。大学生属于国家培养的专业人才,属于国
家干部身份。很多农村来的朋友家里都希望孩子通过念大学而改变祖辈农民的身份(这里没有贬低农民朋友的意思),而很多人却从毕业后就莫名其妙的丢了自己的
干部身份。当然也有很多是根本不在乎自己的干部身份。认为有就有,没有就没有,没有的话我至少是四年大学毕业学士学位。其实你错了。如果你没有留住你的干
部身份,可以说你的大学就是白念,而你只是个有学士学位的工人,根本没有改变你自己(就很多农村朋友来讲)。

干部身份靠什么来?靠三方协议,靠派遣证。派遣证就是你大学生干部身份的证明,假如某天你被提干时,这个就是你可以被提干的证明,因为你是干部身份。否则你就不能被提,因为你是工人。

也许很多人说:我不会被提干,那我要干部身份干嘛,我就想挣钱。

那么我现在要说的就是职称评定了。其中也涉及到关键一年的具体事宜。

大学生持报到证到单位上岗后,必须要经过一年的见习期(国家规定。相当于中专、大专的实习期)。见习期满后,本人必须记得要签"毕业生见习期考核鉴定表
",这是你转正的鉴定表(从此你就拿正常工资了),说明你已经是一个合格的人才了(见习期需要在同一单位完成,也就是你的三方、派遣证以及你的转正证明
表,这三个上面盖的要是同一单位的章,否则视为无效)。紧接着要记得填写"国家统一分配大中专院校毕业生专业技术职务任职资格认定表",也就是初级职称评
定表(这些事要你自己留心,没有人会提醒你去做的,表要到人事部网站下载)。具体可评定的职称可以到人事部网站上查询(职称最好和自己学的专业有联系,否
则到中高级评定时比较难)。现在我国职称评定这块要通过考试(除艺术、工艺美术、体育教练员及广播电视播音4个系列外,申报其他初级系列都需要通过考试才
能获得初级专业技术资格。考试采用闭卷笔答方式,实行统一大纲、统一命题、统一组织。申报人员参加北京市初级专业技术资格考试成绩合格,即可取得《北京市
专业技术资格证书》),以考试来决定你是否能评上职称。当然有些职称评定也不排除某些单位内部的人为原因。在你初级职称评完四年后,也就是你工作的第五
年,你可以申请评定中级职称。再五年后,也就是工作第十年,评定高级职称(具体可上网查)。这样你一辈子的职称就基本评定完了,所以有些幸运的人10年就
可以当上"高级工程师"。在我国,无论各行各业都会有职称评定,而且相信任何单位都希望有那些有职称的人来工作,而且,就算你工作的单位没有职称评定一
说,那想你如果是高级工程师,你拿的钱也绝对比别人多。而什么人能评定职称呢?有干部身份的人。所以从此看出,就算你不当官,你只挣钱,那干部身份对你来
说还是有用的。

说到这里,基本上一般的情况都讲完了。但有些人会问了,我不是本地生,我户口不能留这,没公司给我签三方,你说的都是屁话。呵呵,那你就错了。为什么不变
通的想想呢?例如:你在北京上学,但毕业后没有公司解决你的户口,怎么办?好办!在家里找公司签三方。因为你不能留京,所以你的户口会打回原籍,而档案与
户口不能脱离,所以你的档案也要打回原籍,而如果你想保住干部身份(但想在北京工作),那你就托人也好,请客也好在家找个单位把你的三方签了。然后其他和
上边一样,只是一年后记得回家去办转正与职称评定。如果嫌麻烦,没关系,你就回家就业,别担心回不来北京,因为如果你有职称,那么你就可以以后来京找工
作,而你也会属于人才流动,这时只要你提出单位也会适当解决你的户口问题,否则凭你打工者的身份要求单位解决你户口,梦吧你!

三方协议的签署是没有限制的,与任何公司或单位签都可以,不一定要国企或事业单位,否则每年那么多大学生就业,还不80%都要丢了干部身份,国家还不成白痴了。但要保证一点,就算是三个人的小公司也能签,但不要在一年内倒闭,否则你就没有人给你签转正了,切记切记。

又有人说了,我想考研,我明年要考,我就不签三方了,随便找个活干干,挣点钱完了。那你就大错特错了。(注意:此处考研并非指本科之后直接上研者,是指本科毕业后需要工作1年以上者)

记住,不论任何时候,别放弃你的身份!

如果你要考研,那么你属于在职考研一类,我们分类说一下。

假如你考上了:

你6月大学毕业,7月到单位报到。第二年7月,你转正,初级职称评定。研究生9月入学。当你研究生入学时,哥们已经是有身份的人了,3年研究生读完,哥们
出来直接拿正常工资了(进私企),没有见习期一说了(研究生毕业也有3个月的见习期)。如果你进国企或事业单位,那么研究生3年算工龄(我不知道私企是不
是,但国企或事业单位绝对是),你出来就可以评中级职称了,哥们又赚了一大笔。所以你说你该不该保你的干部身份?

假如你没考上:

没考上更简单,直接继续工作,回头等着评中级,没差什么。

很多人总是怕麻烦,其实一切就是这么简单,如果你做了,那么也许我的话会改变你的一生,如果你没做,那么就当给我捧场,也谢谢你,我们又少了一个竞争对手。不过要记住一句话,别因小失大,谨记!

bash快捷键

Ctrl-A 相当于HOME键,用于将光标定位到本行最前面

Ctrl-E 相当于End键,即将光标移动到本行末尾

Ctrl-B 相当于左箭头键,用于将光标向左移动一格

Ctrl-F 相当于右箭头键,用于将光标向右移动一格

Ctrl-D 相当于Del键,即删除光标所在处的字符

Ctrl-K 用于删除从光标处开始到结尾处的所有字符

Ctrl-L 清屏,相当于clear命令

Ctrl-R
进入历史命令查找状态,然后你输入几个关键字符,就可以找到你使用过的命令

Ctrl-U 用于删除从光标开始到行首的所有字符。一般在密码或命令输入错误时常用

Ctrl-H 删除光标左侧的一个字符

Ctrl-W 用于删除当前光标左侧的一个单词

Ctrl-P 相当于上箭头键,即显示上一个命令

Ctrl-N 相当于下箭头键,即显示下一个命令

Ctrl-T
用于颠倒光标所在处字符和前一个字符的位置。(目前不知道有什么作用,哪位朋友知道?)

Ctrl-J 相当于回车键

Alt-.
用于提取历史命令中的最后一个单词。你先执行history命令,然后再敲击此快捷键若干下,你就懂了!

Alt-BackSpace 用于删除本行所有的内容,基本上和Ctrl-U类似。

Alt-C
用于将当前光标处的字符变成大写,同时本光标所在单词的后续字符都变成小写。

Alt-L 用于将光标所在单词及所在单词的后续字符都变成小写。

Alt-U 用于将光标所在单词的光标所在处及之后的所有字符变成大写。

ps:使用bind -P命令可以查看所有键盘绑定。

ps2:Alt快捷键较少使用,因为常常和编辑器冲突