int型数据输入输出问题

img


%u是输出无符号型,为什么输出的是32768前面那个%d输出是十进制输出是直接吧32768数出来么为什么加一个负号

这里的int类型的取值范围在-32768到32767,32768超过了32767就又回到了-32768,unsigned int 范围是0-65536,自然就可以正常输出32768

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7442615
  • 这篇博客你也可以参考下:小知识点-关于输入输出中的%*d
  • 除此之外, 这篇博客: 关于整形与浮点型与在内存中存储的区别中的  为何会造成呢就是因为整形提升,由于%u,无符号整形, 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  对-128的原反补码进行书写,由于char 8个字节留

    前面由于为1因此前面进行补1补满32个比特位;进行二进制运算结果就是答案。

    相加

    111111111111111111111111111110110;

    原码就为

    10000000000000000000000001001;结果-10;

     

    #include<stdio.h>
    #include<windows.h>
    int main()
    {
    	unsigned int i= 0;
    	for (i = 9; i >= 0; i--)
    	{
    		printf("%u\n", i);
    		Sleep(1000);
    	}
    	return 0;
    }

     上面这个代码也是同样的原因;当i==0,i-=1;时i=-1;由于Sleep的使用才能让我们清晰的看见该过程。所以添加了输出时间秒。

     

     

    后面的结果4294967289后面还有没执行完全。

  • 以下回答由chatgpt基于相关博客总结生成:

    我可以回答这个问题。

    首先,使用%u输出无符号整形时,输出的数值不是32768,而是无符号整形的真实值。如果输出的确实是32768,那么可能是数据类型的问题。请检查代码中对应的变量是否声明为正确的类型,并且是否被正确地初始化和赋值。

    其次,使用%d输出无符号整形时需要加负号是因为%c只能代表有符号整形的最大值,即2147483647。因此,在输出无符号整形的时候,如果该值大于2147483647,其对应的有符号整形可能是负数,需要加上负号来输出正确的值。另外,C/C++语言中规定,使用%d输出无符号整形并没有定义行为,因此,使用%u来输出无符号整形是更加稳妥和规范的做法。

    针对题目中的问题,应该不涉及到数据类型声明的问题。因此,应该是在处理输入输出时的格式控制出现了问题。请仔细检查代码中的输入和输出语句,确保它们的格式控制符是否正确,以及变量类型是否与格式控制符对应。希望这个回答能够帮上你的忙。