unsigned long n=4294967294,m=4294967296;n 输出时为什么是-1我存放长整形整数的是32位的

unsigned long n=4294967294,m=4294967296;n 输出时为什么是-1我存放长整形整数的是32位的

数字的形式都写错了 没有办法通过编译

我猜想您肯定使用一个不标准的编译器如VC6
而且使用printf("%d", n);来输出n

原因是m已经超出了unsigned long的范围,越界了,导致n数值改变了,也就是+1,变成了4294967295,这个数的二进制表示正好是有符号数的-1。越界后什么事情都有可能,不要去追究越界后到底发生了什么。

unsigned long n=4294967294UL;
请使用UL后缀来表示unsigned long的常数
printf("%u", n)来输出
温馨提示:答案为网友推荐,仅供参考