关于yeeyan的求救

2009年1月18日 19:10

我用FF一直都很方便访问译言。不知道哪天出了什么事情,译言的页面就变成这样:

 

删除cookie也不解决问题,猜想是对某一个什么CSS之类的解析错误。

俺对web编程是一点儿都不熟悉,请哪位高手支俺一招,俺就可以继续翻译文章了。多谢!

感谢黄牛党

2009年1月15日 06:41

又到了要买火车票回家的时期了,每到这个时期,“一票难求”就成了每一个要回家团圆,探望父母的漂一族的口头禅。

现在,
我依旧还能清晰的记得,去年这个时期,一大早5点钟就穿戴整齐到售票处去排长龙,尽管排在“龙头”的位置依然还是可能买不到票的那种担心;
我依然还能记得,9点钟过后,浑身冰凉,手中摸着那张到家的火车票,给家里打电话通知父母可以顺利回家的那种喜悦;
我还能依然清晰的记得,挤上回家的列车后,虽然要“对抗”着身边各种味道的同乡,要看着窗外依然无法按时挤上列车的呐喊的兄弟,要顶着彻夜无法入睡的疲惫,彻夜拥有的那种回家的兴奋。

过几天也许这些场景将再次出现。

在网路上看到买票的兄弟有把售票窗口内售票员把大把大把的车票预先私藏,我不禁突然感觉到:还真是要感谢黄牛党!

黄牛党其实也是正当生意。付出辛苦,获得回报。而且黄牛党能够充分利用各种资源进行物资的交换,使得供需双方都能够得到交换的满足,这样极大的使市场流通的人,为什么要遭到大家的唾弃呢?

其实都是为了大家着想:车票紧张,这样大家才会尽其所能,争相购买;调整放票时间,这样才能相对减少黄牛党的竞争对手,绝对增加黄牛党的客户。而且将能够将一定量的车票总价格提高。何乐而不为?对于大多数中国人来说过年回家是必然的,别说交通费用飞涨,车票难买,就算将工作辞掉也有人回家过年。这样强劲的内需,何须拉动?只要想好最快数钞票的方法就好了。

祝我回家顺利~
 

数据转换

2008年7月27日 22:00

  C语言中的数据转换指的是当不同类型的数据作为操作数时,某些运算符的操作会导致这些操作数的从一种类型转换为另一种类型。请注意这仅仅是数据的的类型转换,而不是数据的类型的转换。即: unsigned char Test = 256; 此时 Test的类型为unsigned char 类型,此类型最大值为255, 因此此时Test的值的类型会转换为int 类型。而Test的类型仍然为unsigned char类型。

  数据的值的转换按照转换方式可以大致分为隐式(自动)转换和显式(强制)转换。两种转换的结果都一样,区别在于是否有目的的转换(尤其对于指针转换而言)。【本文将不特别区别自动转换和强制转换】

  按照转换“方向”可以大致分为“升级”和“降级”。 升级即有较低级别的类型转换为较高级别的类型;降级则相反。

  数据转换的目的就是让不同类型的操作数的类型转换为同一类型。一般来说,自动转换会把“较窄”的操作数转换为“较宽”的操作数,进行的是“升级”操作,目的为不丢失数据信息。

  一般情况下,自动转换是“保险”的,但有些时候也不得不对自动转换有些“提防”。

  例如:

        char Test = -1;

  这里Test的值就一定是你看到的-1么? 这可不一定! 对于赋值操作来说也是要进行自动转换的! 这里还要涉及到的是对于char这种类型来说倒底是signed char 还是unsigned char 是和编译器的实现相关,也就是说 Test的值有可能是-1 (signed char);也有可能是255 ( unsigned char)。

  还有对于函数的返回值的自动转换:

        int fun(void)

        {

            ......

            return (int)value;

        }

  对上面的函数的返回值进行保存的时候,如果数据类型不同,也会发生数据转换,也会出现“意想不到”的情况。

 

  下面描述一下一般情况下的算术类型转换(由上至下)

  1,如果任何一个操作数为long double类型,则将另一个操作数转换为long double类型;

  2,如果任何一个操作数为double类型,则将另一个操作数转换为double类型;

  3,如果任何一个操作数为float类型,则将另一个操作数转换为float类型;

  4, 对于整型首先对两个操作数进行整形提升;

  5,如果任何一个操作数为 unsigned long int 类型,则将另一个操作数转换为 unsigned long int 类型;

  6,如果任何一个操作数为 long int 类型,另一个操作数为unsigned int类型。则要看编译器对于int类型,和long int类型哪个更宽,转换为其中更宽的那个。

  7,如果任何一个操作数为 long int 类型,则将另一个操作数转换为 long int 类型;

  8,如果任何一个操作数为 unsigned int 类型,则将另一个操作数转换为 unsigned int 类型;

  9,其余都转换为int 类型;

  还有一种情况就是指针的转换,这种转换为函数的实现提供了极大便利: 函数实现无需关心具体数据的类型。函数仅仅需要将调用者传入的指针都作为(void *)类型,转换为自己处理的类型。这个强转指针保证数据类型的任务交给函数的调用者。 这就给程序的调用和实现者都提出了很高的要求,就是对于指针所指对象的对齐提出很高要求,否则会很容易出现由于强转指针导致地址异常的情况。

 

参考:

1,《C程序设计语言》K&R 第二版

2,http://hi.baidu.com/supersu30/blog/item/862cae97cee97a6855fb967b.html 作者:风急云却静