呵呵,多谢指教了。我还是第一次知道有 two's complement 这种方式。
有关 2^31 的问题。是由于我的计算器的毛病,精度不够,是三十年前的老机器了。
后来我用电脑上的程序算了一下,的确是 2147483648。
On Mon, Nov 19, 2007 at 10:19:06AM -0600, Ming Hua wrote:
On Mon, Nov 19, 2007 at 05:04:47PM +0800, Nickel Cobalt wrote:
首先,的确 int 现在已经是 4 字节了。因此最多能有 2^32 方个数。
惭愧啊,很久不用 C 写程序了,而且现在的工作也跟电脑无关的。今天谢谢各位给我指出错误了。
认真看了一个 ming hua 的程序及其他几位的意见(因为太长,所以我都不引用了)
大致又有印象了。首先,的确 int 现在已经是 4 字节了。因此最多能有 2^32 方个数。
对于unsigned int 来说,因为不带符号,所以最小数是 0,最大是 2^32-1
对于 signed int 来说,带符号,其中有一位要作符号位。所以
最大的正数是 2^31-1-1-1 ,2^31
On Mon, Nov 19, 2007 at 05:04:47PM +0800, Nickel Cobalt wrote:
首先,的确 int 现在已经是 4 字节了。因此最多能有 2^32 方个数。
这个和计算机架构有关。我的机器是 i386 的,所以 int 是 4 字节。
对于 signed int 来说,带符号,其中有一位要作符号位。所以
最大的正数是 2^31-1-1-1
不对。在采用 two's complement [1] 方式表示负整数的系统上 (我们现在用的计
算机都应该用的是这种方式),n-bit 的有符号整数的范围是 -2^(n-1) 到
2字节的int都已经过时十多年了
在 [EMAIL PROTECTED][EMAIL PROTECTED] 写道:
我觉得这个程序可能有点问题。我学过点 C 的。
int 整形数的话,最大的数是 65535,如果是 unsigned 的话再乘2。
而你的 1024*1024*512,远远超过这个范围啊。包括下面的 int i 也是如此。
可能你改下程序会好点吧。
当然这要看具体的机器实现方式,你用 sizeof(int) 看看你的机器把 int
认为是多少个字节吧。如果是 2 的话,那就只有 2^16 ,最大是 65535。如果
是 4 的话,当我上面说的是屁话。呵呵
另外,如果unsigned的话,最大数字会比signed小,而非再乘2
在 [EMAIL PROTECTED][EMAIL PROTECTED] 写道:
我觉得这个程序可能有点问题。我学过点 C 的。
int 整形数的话,最大的数是 65535,如果是 unsigned 的话再乘2。
而你的 1024*1024*512,远远超过这个范围啊。包括下面的 int i 也是如此。
可能你改下程序会好点吧。
当然这要看具体的机器实现方式,你用 sizeof(int) 看看你的机器把 int
认为是多少个字节吧。如果是 2 的话,那就只有 2^16 ,最大是 65535。如果
是
On Sat, Nov 17, 2007 at 05:46:04PM +0800, 任晓磊 wrote:
另外,如果unsigned的话,最大数字会比signed小,而非再乘2
不可能。
$ cat int-range.c
#include stdio.h
#include limits.h
int main( void )
{
printf( The length of int is %zd bytes.\n, sizeof( int ) );
printf( The maximum signed integer is %d.\n, INT_MAX );
晕死啊!
怎么又回复给作者了!
debian中文列表这个设置啥时候才能改改……
在07-11-18,Christian Leng [EMAIL PROTECTED] 写道:
你正好记反了……
在07-11-17,任晓磊 [EMAIL PROTECTED] 写道:
另外,如果unsigned的话,最大数字会比signed小,而非再乘2
在 [EMAIL PROTECTED][EMAIL PROTECTED]
写道:
我觉得这个程序可能有点问题。我学过点 C 的。
int 整形数的话,最大的数是 65535,如果是 unsigned 的话再乘2。
新配的一台 core2 Q6600,跑 debian sid
amd64,今天碰到系统突然失去响应的情况。写了简单的c程序测试,就是开了个4G的数组,运行时大约有50%的概率造成死机。后来在console上运行时看到输出
panic 信息,先是一大堆信息,最后一行是:Kernel panic - not syncing: Aiee, killing
interrupt handler
机器的硬件是:
CPU:Q6600
主板:华硕P5b
内存:4G kingston?
显卡:华硕8500GT
系统是 debian sid amd64, 内核版本是
4G
On Nov 15, 2007 5:57 PM, Yingbo Qiu [EMAIL PROTECTED] wrote:
你机器有多大内存啊..
On Nov 15, 2007 5:34 PM, allan xu [EMAIL PROTECTED] wrote:
新配的一台 core2 Q6600,跑 debian sid
amd64,今天碰到系统突然失去响应的情况。写了简单的c程序测试,就是开了个4G的数组,运行时大约有50%的概率造成死机。后来在console上运行时看到输出
panic 信息,先是一大堆信息,最后一行是:Kernel panic - not syncing: Aiee, killing
interrupt handler
机器的硬件是:
CPU:Q6600
主板:华硕P5b
内存:4G
如何开的数组?
直接 char szBigArray[];这样还是malloc阿?
在我这边,malloc没问题,另外一种段错误.
在 2007-11-15四的 17:34 +0800,allan xu写道:
新配的一台 core2 Q6600,跑 debian sid
amd64,今天碰到系统突然失去响应的情况。写了简单的c程序测试,就是开了个4G的数组,运行时大约有50%的概率造成死机。后来在console上运行时看到输出
panic 信息,先是一大堆信息,最后一行是:Kernel panic - not syncing: Aiee, killing
interrupt
怀疑是主板的问题!换了我会把主板集成的设备在 BIOS 中禁用掉后试用。
首先是声卡,因为P5B的声卡问题尤其突出,其次是网卡,有很多用户反映。
如果要更换硬件测试的话,首先建议是更换电源,其次是更换主板。
--
Vern
你机器有多大内存啊..
直接 double aa[1024*1024*512],刚好用4G。可以跑的,因为有的时候能跑完。
程序大概是这样的
// test.cpp
const int N = 1024*1024*512;
double aa[N];
int main()
{
double sum = 0;
for (int i=0;i N;++i)
aa[i] = (i % 1024)*0.001;
for (i = 0; i N;++i)
sum += aa[i];
printf(sum = %lf\n, sum);
}
On Nov 15,
今天把内存重新插拔了几次,好像问题就消失了。
谢谢诸位!
On Nov 15, 2007 8:38 PM, Vern Sun [EMAIL PROTECTED] wrote:
怀疑是主板的问题!换了我会把主板集成的设备在 BIOS 中禁用掉后试用。
首先是声卡,因为P5B的声卡问题尤其突出,其次是网卡,有很多用户反映。
如果要更换硬件测试的话,首先建议是更换电源,其次是更换主板。
--
Vern
15 matches
Mail list logo