%d 是当有符号的输出的 ,用%u就行了;
16位程序输出确实是 -1,32位程序输出就不会错了.
无符号整数。
注意整数的取值范围!
应该定义
unsigned long x;
你定义的是无符号整型数。
而X的初值已经超过了定义所要求的范围。
这方面的范围书上都是有的。
数据在内存中是以二进制存储的,在32位机中,int型数据一般占2个字节,也就是16个0或1。无符号的整型数据直接被译成二进制,即65535变成1111111111111110。此时应以无符号的形式输出,%u,则1111111111111110变成65535。但是你以有符号整型输出,有符号的整型数据在内存中以他的补码的形式存储,从补码到十进制的转化中,1111111111111110就被转化成了-1,这个过程请查看计算机基础中的数据存储一章。以后应注意各种数据类型的范围:int -32768~32767,unsigned int 0~65535………