今天偶然发现,压轴是倒数第二。汗。
原文链接: http://www.yangtse.com/dzbpd/dbcg/200611/t20061113_191856.htm
扬子晚报2006年11月7日A18版,在题为《赵本山:我爱这片地》一文中写道:"……最后,主持人又让宋祖英作压轴式的'总结发言'……",这里 用"压轴"一词来形容或比喻"最后"一个精彩的节目(内容),实际上是一个谬传了很久很广的错误用法。因为"压轴"并非指"最后"。
据上海辞书出版社出版的《辞海》(缩印本・1989年版)称:"压轴是戏曲术语。指一台折子戏演出中的倒数第二个剧目。由于最末一个剧目称大轴而得 名。"例如,京剧一场戏如果有五出的话,第一出叫作"开锣戏",第二出名曰"早轴",第三出称为"中轴",第四出(倒数第二)则为"压轴",第五出(最后 一出)称作"大轴"。由此可见,"压轴"与"最后"不是一回事。如今一些报纸杂志误用倒数第二的"压轴"来称倒数第一(最后),显然是不对的。因此,希望 作者(记者)和编者都应不断学习,增长知识,讲究词语,不要再以讹传讹了。若无把握,不妨查查案头的《辞海》等工具书,以防常识性谬误。
另外,笔者认为,如果将最后一个精彩的节目(内容)称为"压台(戏)",岂不比"压轴(戏)"既正确又准确!不知诸君以为然否?
南京读者 凌 晓
来源:扬子晚报
2007-08-29
2007-08-27
清除木马的一个心得
My Computer, 右键, Properties, Hardware, Device Manager, View / Show hidden devices, No-plug and play Drivers
如果修改 Driver 那个页面的 Startup Type, 即使修改成 disabled, 似乎重启后还是会变成 boot 之类的, 驱动一样会被加载.
要在 General 那个页面把 Device usage修改成 Do not use this device (disable), 重启后设备将被禁用, 可以删除驱动文件.
然后再在注册表中查找相关内容清除.
如果修改 Driver 那个页面的 Startup Type, 即使修改成 disabled, 似乎重启后还是会变成 boot 之类的, 驱动一样会被加载.
要在 General 那个页面把 Device usage修改成 Do not use this device (disable), 重启后设备将被禁用, 可以删除驱动文件.
然后再在注册表中查找相关内容清除.
2007-08-24
BoundsChecker的一个不足
先看如下代码断:
BYTE * pTemp = (BYTE *)malloc(1);
pTemp[2] = '1';
free(pTemp);
BoundsChecker没有对 pTemp[2] = '1' 报错。
但是,在 free(pTemp) 时却提示memory overrun。
如果 malloc 和 free 两个语句不是在一起(比如在一个类的不同函数中),那么想找到内存被覆盖的地方是相当困难的。
但是,如果仅仅是这样,能报错还总算不错了。再看如下代码:
BYTE * pTemp = (BYTE *)malloc(1);
pTemp[20] = '1';
free(pTemp);
这次连 free(pTemp) 时都不提示了。这是因为BoundsChecker对申请的内存加了一些标志,如果这些标志没有被破坏,那么BoundsChecker是不能发现的。
对于 new 和 delete 操作,问题一样。
BYTE * pTemp = (BYTE *)malloc(1);
pTemp[2] = '1';
free(pTemp);
BoundsChecker没有对 pTemp[2] = '1' 报错。
但是,在 free(pTemp) 时却提示memory overrun。
如果 malloc 和 free 两个语句不是在一起(比如在一个类的不同函数中),那么想找到内存被覆盖的地方是相当困难的。
但是,如果仅仅是这样,能报错还总算不错了。再看如下代码:
BYTE * pTemp = (BYTE *)malloc(1);
pTemp[20] = '1';
free(pTemp);
这次连 free(pTemp) 时都不提示了。这是因为BoundsChecker对申请的内存加了一些标志,如果这些标志没有被破坏,那么BoundsChecker是不能发现的。
对于 new 和 delete 操作,问题一样。
为什么x==y而cos(x) != cos(y)
代码:
#include <cmath>
void foo(double x, double y)
{
double x1 = cos(x);
double y1 = cos(y);
if (cos(x) != cos(y))
{
std::cout << "Huh?!?\n";
}
if (x1 != y1)
{
std::cout << "HeiHei!!!!!\n";
}
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
double x = 1.0;
double y = 1.0;
if (x == y)
{
std::cout << "!@#!@#!@#\n";
}
foo(1.0, 1.0);
return 0;
}
解释:
对于常见的intel CPU,浮点寄存器的精度比double高。
所以,实际上,比较时到底相不相等,取决于浮点数存放在哪里。
如果都在寄存器或者都在内存中,都会一样;如果有个在寄存器,有个在内存,则很容易不相等。
这个跟编译器有点关系,但是跟CPU硬件关系更大,这就是为什么liuwenshu在他便携上ubuntn下用gcc编译了结果与windows一样的原因。
你还可以试试,debug和release版运行结果都是不一样的,我想这可能是6楼 ilcs 说结果跟lz不一样的原因。
#include <cmath>
void foo(double x, double y)
{
double x1 = cos(x);
double y1 = cos(y);
if (cos(x) != cos(y))
{
std::cout << "Huh?!?\n";
}
if (x1 != y1)
{
std::cout << "HeiHei!!!!!\n";
}
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
double x = 1.0;
double y = 1.0;
if (x == y)
{
std::cout << "!@#!@#!@#\n";
}
foo(1.0, 1.0);
return 0;
}
解释:
对于常见的intel CPU,浮点寄存器的精度比double高。
所以,实际上,比较时到底相不相等,取决于浮点数存放在哪里。
如果都在寄存器或者都在内存中,都会一样;如果有个在寄存器,有个在内存,则很容易不相等。
这个跟编译器有点关系,但是跟CPU硬件关系更大,这就是为什么liuwenshu在他便携上ubuntn下用gcc编译了结果与windows一样的原因。
你还可以试试,debug和release版运行结果都是不一样的,我想这可能是6楼 ilcs 说结果跟lz不一样的原因。
2007-08-07
Subscribe to:
Posts (Atom)