c – 模运算的结果是否定的

c – 模运算的结果是否定的,第1张

概述为什么以下C代码产生负数作为输出?我该如何防止这种情况发生? #include <stdio.h> int main() { int i; char buf[1024]; for (i = 0; i < 1024; i++) buf[i] = i%256; 为什么以下C代码产生负数作为输出?我该如何防止这种情况发生?

#include <stdio.h>    int main()    {            int i;            char buf[1024];            for (i = 0; i < 1024; i++)                    buf[i] = i%256;            for (i=0; i<1024; i++) {                    printf("%d ",buf[i]);                    if (i%32==31)                            printf("\n");            }    }
解决方法 我们来看看这行代码:

buf[i] = i%256;

这里,i%256被计算为int类型的值.但是,buf是一个字符数组,所以当将值赋给数组时,它会被截断为char.如果模数的结果在可以存储在char中的正值范围之外,则它可能最终缠绕并且作为负数存储.

换句话说,并不是模数产生的负值与将结果存储在无法保持的类型中一样多.尝试将数组更改为int数组或unsigned char数组,看看是否修复了这些问题.

希望这可以帮助!

总结

以上是内存溢出为你收集整理的c – 模运算的结果是否定的全部内容,希望文章能够帮你解决c – 模运算的结果是否定的所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216438.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存