c++中unsigned与int


//以10分为一个分数段统计成绩的数量:0~9,10~19,..., 90~99,100
    vector<unsigned> scores(11,0); // 11个分数段,全都初始化为0
    unsigned grade;
    while (cin >> grade)                //读取成绩
    {
        if (grade<=100)                 // 只处理有效的成绩
            ++scores[grade/10];         // 将对应分数段的计数值加1
    }

这里使用unsigned与使用int有什么区别

unsigned 是无符号就是范围更大 全是正数
int 就是有符号整型 可以取正负但是 数值少了一半

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你看下这篇博客吧, 应该有用👉 :unsigned int 与 int 间的区别
  • 除此之外, 这篇博客: C++_int负数转unsigned中的 有符号数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    有符号数中有一个符号位,正数为0,负数为1.
    例如
    int a=3;
    因为c++中的int占32位
    3的二进制数表示为
    0000 0000 0000 0000 0000 0000 0000 0011
    -3的二进制数表示为
    1000 0000 0000 0000 0000 0000 0000 0011

  • 以下回答来自chatgpt:

    回答:

    在C++中,int是有符号整数,而unsigned是无符号整数。在使用时,具有不同的应用场景和注意事项。

    unsigned适用于大于或等于0的整数,因为它可以表示更大的正整数范围。unsigned类型的值将始终大于或等于0,因此如果您希望一个值始终为正,可以考虑使用unsigned类型。但是,如果你使用signed int并对它进行移位等操作,那么你最好将它转换为unsigned类型,以避免在右移时引入符号扩展。

    例如:

    #include <iostream>
    using namespace std;
    
    int main()
    {
       unsigned int a;
       int b;
    
       a = 10;
       b = -10;
    
       cout << "unsigned a is " << a << endl;
       cout << "signed b is " << b << endl;
    
       return 0;
    }
    

    上面的代码将输出:

    unsigned a is 10
    signed b is -10
    

    同时,因为unsigned类型无法表示负数,所以需要小心使用负数的情况,可能会出现符号扩展和无符号转换的问题,从而导致意想不到的行为。

    因此,当你需要表示一些确切的值,而不是表示一个双向的差异时,使用int类型。如果你知道你的值将始终为正数,则使用unsigned类型。

    例如:

    #include <iostream>
    using namespace std;
    
    int main()
    
    {
       int a;
       unsigned b;
    
       a = -1;
       b = 1;
    
       cout << "a is " << a << endl;
       cout << "b is " << b << endl;
    
       return 0;
    }
    

    上面的代码将输出:

    a is -1
    b is 1
    

    在变量类型上作出正确的决策可能会对程序的性能产生显著的影响,因此在给定的情况下,需要仔细考虑使用哪种类型。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^