//以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 就是有符号整型 可以取正负但是 数值少了一半
有符号数中有一个符号位,正数为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
回答:
在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
在变量类型上作出正确的决策可能会对程序的性能产生显著的影响,因此在给定的情况下,需要仔细考虑使用哪种类型。