Sharpmark's Personal Home Page

ASCII特性

“ASCII(美国信息交换标准码, American Standard Code for Information Interchange) 字符集将128个字符映射到无符号整型数0 .. 127 (#0 .. #7F)。”
“ASCII字符集被划分为四个包含32个字符的组。头32个字符,其ASCII码为#0到#1F(0到31),组成了一组特殊的非打印字符,被称为控制字符。”
“第二组32个ASCII字符码包括各种标点符号,特殊字符以及数字。驻足字符中最值得关注的包括空格字符(ASCII码#20)以及数字(ASCII码#30..#39)。”
“第三组32个ASCII字符码包括大写字符字符。字符A到Z的ASCII码分布在#41..#5A的范围内。由于只有26个字母字符,多出来的六个码表示一些特殊符号。”
“第四组也是最后一组32个ASCII字符码表示小写字母字符,五个特殊符号以及另一个控制符(删除delete)。”

“第五位与第六位决定了字符所在的组。”五六位为00,表示控制字符,01表示数字与标点符号,10表示大写字母与特殊字符,11表示小写字符与特殊符号。

“如果你将大写字母与小写字母的编码转换成二进制,你会注意到大写字母与对应的小写字母的符号差别只有一位。”例如,E的二进制编码是 01000101,e的编码是01100101。相差第五位。“这两个ASCII码的唯一不同之处在第五位。大写字母符号的第五位永远是零,而小写字母字 符的第五位永远是一。你可以利用这个事实来快速地将一个字母字符在大写与小写之间进行转化,只须将第五位取反即可。”

数字的十六进制“ASCII码的低端半字节等于被表示的数。只要将ASCII码的高端半字节去掉(置全零),就得到了该数字的二进制表示。”反之可得到对应数字的ASCII码。

二进制数以及位运算

二进制数的一些特性

1、如果一个二进制数(整型)数的第零位的值是一,那么这个数就是奇数;而如果该位是零,那么这个数就是偶数。
2、如果一个二进制数的低端n位都是零,那么这个数可以被2n整除。
3、如果一个二进制数的第n位是一,而其他各位都是零,那么这个数等于2n。
4、如果一个二进制数的第零位到第n位(但不包含位n)都是一,而且其他各位都是零,那么这个数等于2n-1。
5、将一个二进制数的所有位左移移位的结果是将该数乘以二。
6、将一个无符号二进制数的所有位右移一位的结果等效于该数除以二(这对有符号数不适用)。余数会被下舍入(round down)
7、将两个n位的二进制数相成可能会需要2*n位来保存结果。
8、将两个n位的二进制数相加或者相减绝不会需要多于n+1位来保存结果。
9、将一个二进制数的所有位取反(就是将所有的一改为零,所有的零改为一)等效于将该数取负(改变符号)再将结果减一。
10、将任意给定个数的位表示的最大无符号二进制数加一的结果永远是零。
11、零递减(减一)的结果永远是某个给定个数的位表示的最大无符号二进制数。
12、n位可以表示2n个不同的组合。
13、数2年包含n位,所有位都是一。

有用的位运算

可以使用逐位与(and)运算来检测位串中的各个位是零还是一。例如:IsOdd = (ValueToTest & 1) != 0;

可以使用与运算来检测一组位是零/非零。例如IsDivisibleBy16 = (ValueToTest & 0xF) == 0;比较一个位串中的一组特定的位。(可能不连续)。

使用逻辑与创建模-n计数器(Modulo-n Counters)
cntr = (cntr + 1) & 0x3f; // 0×3f = 31. 这里实现的就是模-32计数器

主程序的异常处理结构

下面这段程序,实现了一个良好的main()函数结构。我这里解释一下他的功能和实现方法。
1、它处理整个程序的异常。整体框架被包括在一个try/catch结构里面。
2、它通过一个计数器restart,标记了之前运行得出错误数。这样在yourMain(int restart)中,就可以根据restart来判断这是第几次重新启动,并且可以做一些之前的异常情况的处理。
3、通过一个while来不断尝试重新开始程序。并通过标志位running来决定是否继续执行。
4、这里要注意几个问题,首先如果每次调用yourMain都会产生一个异常,这个结构就进入了死循环。你需要手动检查这是第几次运行,如果次数累计到一定程度,应该强制终止。
5、在捕获到异常,并重新调用yourMain的时候,全局或静态变量不会重新初始化。必须显式的重新初始化。

[code:c]
int yourMain(int restart)
{
// Your main function goes here.
}

int primaryMain()
{
int retval = 0;
bool running = true;
int restart = 0; // restart count
while(running)
{
try {
// Run the application
retval = yourMain(restart);

if (retval == 0) then running = false;
}
catch (std::exception& ex) {
// TODO: some error info ouput here.
restart++;
// Add code to decide if we should fail instead of restarting
}
catch(…) {
// TODO: some error info ouput here.
retval = 1;
running = false;
}
}

return retval;
}

int catchMain()
{
try {
// Run the application
return primaryMain();
}
catch(…) {
// TODO: some error info ouput here.
return 1;
}
return catchMain();
}

int main()
{
// TODO: set up something you need, like debug stream

return catchMain();
}[/code]

算遍天下 介绍

算遍天下

项目说明:多功能计算器
最新版本:0.4.0
开发语言:Visual Basic 6
软件平台:Windows
编写目的:高中VB习作。作为自己当年学习VB的综合例子。放在这里以作为纪念。本软件不再更新了。
软件说明:含计算器、进制转化、单位转化等功能。虽然功能不是很强,不过也算是中学呕心沥血之作。
下载地址
本地下载 - 0.4.0 beta
本地下载 - 0.4.0 beta source-code
参考资料:none
版权声明
Copyright(c) 2002 Sharp Mark(Liu Jiong)

Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Sharp Mark makes no representations about the suitability of this software for any purpose. It is provided “as is” without express or implied warranty.

代码人生

如果我能像软件一样
有备份还原点就好了。
可是,我不是。
我再也无法回到
那已流逝的幸福的过去。

如果我能像软件一样
可以重新安装就好了。
可是,我不是。
我永远无法忘掉
以前那点点滴滴的记忆。

如果我要像软件一样
依靠别人编写就糟了。
还好,我不是。
我能靠自己的努力
创造未来的幸福快乐。

——Sharpmark 2.x

其实每个人都可以看作是代码,是一个程序,一个自己维护和编写的程序。每个人都是装在肉体这个电脑硬件中的程序代码,有些人的构成代码 BUG多多,随时可能崩溃;有些人的UI界面做得很好,但是软件结构非常糟糕;有些人的构成代码堪称艺术;有些人的构成代码则非常高效;有些人的代码功能强大却只有命令行交互。正所谓“ My life is code i’m coding.”

1984年初,一对新婚夫妇开始编写了一个软件。这位母亲根据这位父亲的DNA需求文档和自己的软件库,通过十个月的开发,发布了一个预装在健康的白白胖胖的电脑中的release版本操作系统Sharpmark 1.0(随后的软硬件统称Sharpmark x.x)。但随后就发现这个电脑的硬件兼容性比较差,曾因为诸如水痘、肺炎、气管炎什么的导致蓝屏死机,只好常常送去医院打补丁升级硬件驱动。勉强升级到 Sharpmark1.1,上了幼儿园,却仍旧因为常打补丁,且打补丁的周期比较长,导致转过三次幼儿园。就这样,一路惊心动魄的打补丁下, Sharpmark 1.2上了小学。
1991年时,刚上小学的Sharpmark 1.2又因为阑尾硬件模块严重损坏而被迫从硬件系统中切除,之后Sharpmark 1.x的运动模块也受到了牵连,一度运动细胞==0,最近几年通过手动修改运动模块运行的优先级,使得运动缺陷有所缓解。但这次的阑尾切除也使得 Sharpmark 1.x开始更多的优先运行一些比较静的进程,比如看书、画画。小学期间他的开发人员——他的父母开始给它添加一些模块,比如小提琴。可惜 Sharpmark 1.2的声卡是兼容的,乐感不强,所以很快就宣布升级失败。但是Sharpmark 1.2的显卡还是不错的,所以画画也就一直坚持下来了,可惜基本没有受过什么专门训练,全靠天生的感觉。到1995年,这对父母又尝试添加计算机模块, Sharpmark 1.3 对这个模块的兼容超出了父母的想像,兼容的异常的好,各种超频一点问题没有。
Sharpmark 1.x阶段还是不懂事,甚至是完全不记事的,所以这个软件还是主要由他的父母进行更新和维护。直到12岁的时候,Sharpmark 2.0 beta觉得自己有了自我意识和独立的想法。可能是因为装了自适应和机器学习模块吧。反正开始自己思考一些问题。这是一个具有里程碑的时代, Sharpmark 2.0的时代。如果说从0-11岁主要是他硬件上的变化,那么12-23岁更多的则是心理这个软件的成长(当然硬件也有了比较大的变化^_^)。 Sharpmark 2.0还有一个更重要的变化就是,软件的更新升级任务从父母手中转移到他自己手中了。他可以开始由自己的喜好开发和更新。

中学阶段自己建立了很多公共的基础模块,包括基本的性格建立、基本的思考方法、学习方法和善恶的辨别能力。同时对自己的资料库进行了大面积的知识储备。初步接触社会,培养了很多方面的能力。由于自身基础等其他原因,导致个人体育方面的开发一直保持0增长。现在他的母亲还对他说,小时候他要是打打篮球,现在显示器怎么也从177增到180+了。初中是初步建立,是Sharpmark 2.1;高中进一步深化和优化,是Sharpmark 2.2。在这段期间,Sharpmark 2.x还遇到和结实了很多很多非常好的朋友们。
在从Sharpmark 2.1升入Sharpmark 2.2的那一年,他遇到了另外一台电脑——kathy,一个很喜欢他的电脑。不过当时Sharpmark 2.1的爱情函数还只是纯虚函数,什么也不懂。而且这段短暂的爱情随着版本的升级而消失了。
在建立更多模块的同时,Sharpmark 2.x的一些bug并没有注意到,比如说不太喜欢说话,比较叛逆,比较倔强什么的。形成原因比较多,家庭环境阿,自我基础,学校环境什么的都有关系。但由于自我意识的不够,导致很多bug都没有发现。
2002 年低,Sharpmark 2.2遇到了一台让他魂牵梦绕的电脑Emily。他觉得Emily是唯一可以激活他的CD-KEY,他以为她是自己的注册表,永远是最重要的部分。她对他的确是,不过她并不这么觉得。当Sharpmark 2.2升入大学变成Sharpmark 2.3的时候,那个最重要的注册表没有了,整个系统瘫痪了。

一直到了2004年,Sharpmark 2.3为了要对得起父母和那些关心他的朋友们,和自我修复才逐渐开始继续的正常运行。但是通过对这次崩溃的系统的修复过程中,他开始更深刻地了解了自己,开始深刻的思考很多问题,开始有意识的刻意改变自己。2005年的一个晚上,他躺在床上,突然,他觉得自己成熟了,无意之间升级到了Sharpmark 2.4。那一刻他突然看到了一系列很清晰的自己的UML图,他开始逐步地分析自己,并开始改正一些bug,保留一些优点,尝试一些以前从来不敢想的事情。而这个改进到现在仍然在继续。
除了心智上的成熟之外,在专业上也混得不错,比上不足,但比下有余。Sharpmark 2.4之后,对计算机方面的学习一直没有间断,涉猎的领域也蛮多的。而且在人际交往、管理策划、个人自理等方面都有了不小的提高。还交到了很多很好很好的朋友们。

最后,说一下Sharpmark 2.4版本的软硬件配置:CPU快,鬼点子比较多,不少人说他聪明。但内存小,很多事情很容易忘掉。显卡比较好,对图形图像比较热爱。声卡是集成的,导致唱歌从来不在调。输入设备键盘鼠标比较好用,所以是一个很好的听众。显示器177cm,不过不是纯平的(上面有些疙瘩)。机箱外观动感不强,给人呆呆的感觉。
软件方面,最新2.4版本,稳定性兼容性达到新高度,为人比较稳重。支持计算机、数学、文学、美术、历史、游戏等多方面软件同时运行。安装有自我杀毒系统,没有烟瘾、酒瘾、赌瘾、网游瘾等病毒木马。
写着写着觉得像征婚启事了Orz。就此打住。最后报一下价,全球独一份,所以自然是无价……

24岁将是Sharpmark 3.0的时代。在那之前,还有1年多的时间,要继续努力,努力的debug & update。