呵呵,多谢指教了。我还是第一次知道有 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 方个数。
>
> 这个和计算机架构有
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) 到
惭愧啊,很久不用 C 写程序了,而且现在的工作也跟电脑无关的。今天谢谢各位给我指出错误了。
认真看了一个 ming hua 的程序及其他几位的意见(因为太长,所以我都不引用了)
大致又有印象了。首先,的确 int 现在已经是 4 字节了。因此最多能有 2^32 方个数。
对于unsigned int 来说,因为不带符号,所以最小数是 0,最大是 2^32-1
对于 signed int 来说,带符号,其中有一位要作符号位。所以
最大的正数是 2^31-1-1-1 ,2^31
方是2147483650,减1是因为有个0,要去掉一个数。再减1是因为假设10个数的话,应该是0-9(呵呵
晕死啊!
怎么又回复给作者了!
debian中文列表这个设置啥时候才能改改……
在07-11-18,Christian Leng <[EMAIL PROTECTED]> 写道:
>
> 你正好记反了……
>
> 在07-11-17,任晓磊 <[EMAIL PROTECTED]> 写道:
> >
> > 另外,如果unsigned的话,最大数字会比signed小,而非再乘2
> >
> > 在 [EMAIL PROTECTED]<[EMAIL PROTECTED]>
> > 写道:
> > > 我觉得这个程序可能有点问题。我学过点 C 的。
> > > int 整形数的话,最大的数是 655
On Sat, Nov 17, 2007 at 05:46:04PM +0800, 任晓磊 wrote:
> 另外,如果unsigned的话,最大数字会比signed小,而非再乘2
不可能。
$ cat int-range.c
#include
#include
int main( void )
{
printf( "The length of int is %zd bytes.\n", sizeof( int ) );
printf( "The maximum signed integer is %d.\n", INT_MAX );
printf( "Th
另外,如果unsigned的话,最大数字会比signed小,而非再乘2
在 [EMAIL PROTECTED]<[EMAIL PROTECTED]> 写道:
> 我觉得这个程序可能有点问题。我学过点 C 的。
> int 整形数的话,最大的数是 65535,如果是 unsigned 的话再乘2。
> 而你的 1024*1024*512,远远超过这个范围啊。包括下面的 int i 也是如此。
> 可能你改下程序会好点吧。
>
> 当然这要看具体的机器实现方式,你用 sizeof(int) 看看你的机器把 int
> 认为是多少个字节吧。如果是 2 的话,那就只有 2^16 ,最大是 6553
2字节的int都已经过时十多年了
在 [EMAIL PROTECTED]<[EMAIL PROTECTED]> 写道:
> 我觉得这个程序可能有点问题。我学过点 C 的。
> int 整形数的话,最大的数是 65535,如果是 unsigned 的话再乘2。
> 而你的 1024*1024*512,远远超过这个范围啊。包括下面的 int i 也是如此。
> 可能你改下程序会好点吧。
>
> 当然这要看具体的机器实现方式,你用 sizeof(int) 看看你的机器把 int
> 认为是多少个字节吧。如果是 2 的话,那就只有 2^16 ,最大是 65535。如果
> 是 4 的话,当我上面说
我觉得这个程序可能有点问题。我学过点 C 的。
int 整形数的话,最大的数是 65535,如果是 unsigned 的话再乘2。
而你的 1024*1024*512,远远超过这个范围啊。包括下面的 int i 也是如此。
可能你改下程序会好点吧。
当然这要看具体的机器实现方式,你用 sizeof(int) 看看你的机器把 int
认为是多少个字节吧。如果是 2 的话,那就只有 2^16 ,最大是 65535。如果
是 4 的话,当我上面说的是屁话。呵呵
Good luck,
Nickel Cobalt
On Thu, Nov 15, 2007 at 08:25:46PM +0800,
今天把内存重新插拔了几次,好像问题就消失了。
谢谢诸位!
On Nov 15, 2007 8:38 PM, Vern Sun <[EMAIL PROTECTED]> wrote:
> 怀疑是主板的问题!换了我会把主板集成的设备在 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,
你机器有多大内存啊..
怀疑是主板的问题!换了我会把主板集成的设备在 BIOS 中禁用掉后试用。
首先是声卡,因为P5B的声卡问题尤其突出,其次是网卡,有很多用户反映。
如果要更换硬件测试的话,首先建议是更换电源,其次是更换主板。
--
Vern
如何开的数组?
直接 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
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
On Nov 15, 2007 5:57 PM, Yingbo Qiu <[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 kingston?
显卡:华硕8500GT
系统是 debian sid amd64, 内核版本是 2.6.22,无论是自带的内核还是编译的
16 matches
Mail list logo