一个奇怪的移位计算结果
今天 强迫症 朱小瘦同学提到一个非常有意思的问题,一个32bit的无符号整数算术右移32个bit应该得多少?
我们知道算术右移一个bit相当于除2,所以一个32bit无符号整数除以 ,理论上,应该得0。
然而事实不是这样。测试显示在 x86 系统上,一个32bit无符号整数算术右移32个bit之后得到的是原数。例如下面这个测试程序:
| |
不启用任何优化的话,编译出来的程序得到的结果是:
5a5a5a5a更进一步,我们将上面的测试改写为:
| |
共 105 篇文章。
今天 强迫症 朱小瘦同学提到一个非常有意思的问题,一个32bit的无符号整数算术右移32个bit应该得多少?
我们知道算术右移一个bit相当于除2,所以一个32bit无符号整数除以 ,理论上,应该得0。
然而事实不是这样。测试显示在 x86 系统上,一个32bit无符号整数算术右移32个bit之后得到的是原数。例如下面这个测试程序:
| |
不启用任何优化的话,编译出来的程序得到的结果是:
5a5a5a5a更进一步,我们将上面的测试改写为:
| |
最近遇到一些奇怪的bug,因为是对恢复时间有比较高要求的系统,所以顺便研究了一下用FreeBSD的textdump来代替更早前出现的minidump的方法。
So finally Doug Rabson has make it. It’s written with D Language and is in git here.
WxClassInfo的析构函数(~WxClassInfo)死循环是什么原因?检查发现RTTI的那个链表有个环,但是不太明白这个表(从上下文看是由Register()方法维护的)为什么能出现环?
今天 康神 发现一个浮点数的问题,一个 class 里面有两个浮点(double) 成员 x、y,然后用 return (self.x, self.y).__str__() 返回时,发现输出是 (39.210279999999997, 116.34528) 而不是希望的 (116.345280, 39.210280)。
查了一下,改成 return “(%f, %f)” % (self.x, self.y) 解决。C里面printf的 %f 默认显示小数点后面6位,但是 __str__ 似乎自己对于浮点数精度有些想法?没看 Python 具体的实现。
前一阵子一直无法在 FreeBSD/amd64 上面利用 engimail-thunderbird 来进行 PGP 签名。简单说来,一开始是注册控件的时候 signal 11,留下怪怪的backtrace,到后来索性没反应了。
发信到 engimail 的邮件列表,结果他们也觉得很奇怪。
昨天 房东 说,Py-KQueue 在 Python 2.5.1 上面烂掉了。
今天跑了一下他昨天的两行用例,果然……看代码似乎是因为用了Python 1.5的内存对象API,不知道是谁改的,过分!
今天 Howard Wang 找我抱怨 php5-gd 依赖 xorg 的问题。大概看了一下,很明显这是一个 bug,不过并不是很好修,目前并没有很高效的方式来检测GD在联编过程中是否启用了XPM(默认情况下并不是这样)。
今年2月底的时候我跟 李逵 发现了一个fork的race,然后我做了一个fix。在当时看来,这个fix并不是很理想(会在进程fork的时候增加两次PROC锁的持放操作),但与有人提出来的另外一种解决方案,也就是利用EVENTHANDLER(9)机制去作callback相比,这个解法没有活锁问题。
去掉以后,下列症状消失:
pid 11673 (httpd), uid 80: exited on signal 11
pid 25946 (httpd), uid 80: exited on signal 11
pid 26292 (httpd), uid 80: exited on signal 11
pid 13623 (httpd), uid 80: exited on signal 11
pid 27096 (httpd), uid 80: exited on signal 11
pid 31838 (httpd), uid 80: exited on signal 11
pid 30847 (httpd), uid 80: exited on signal 11
pid 38579 (httpd), uid 80: exited on signal 11
pid 38269 (httpd), uid 80: exited on signal 11
pid 34011 (httpd), uid 80: exited on signal 11
pid 38698 (httpd), uid 80: exited on signal 11
pid 32137 (httpd), uid 80: exited on signal 11
pid 38754 (httpd), uid 80: exited on signal 11
pid 38756 (httpd), uid 80: exited on signal 11
pid 38755 (httpd), uid 80: exited on signal 11
pid 38759 (httpd), uid 80: exited on signal 11
pid 38760 (httpd), uid 80: exited on signal 11
pid 39259 (httpd), uid 80: exited on signal 11
pid 39253 (httpd), uid 80: exited on signal 11