int+unsigned int 跟char+unsigned char区别
int+unsigned int 和char+unsigned char区别?
我在一些地方看到表达式中存在有符号类型和无符号类型时所有操作都自动转化为无符号类型。可是下面两个程序输出结果不一样,请教专家解惑。
#include <iostream>
using namespace std;
void main ()
{
unsigned int a =6;
int b=-20;
cout<<a+b<<endl;
}
这个程序输出4294967282,将int改成char,即程序为:
#include <iostream>
using namespace std;
void main ()
{
unsigned char a =6;
char b=-20;
cout<<a+b<<endl;
}
输出结果为-14.
望各位大神不吝赐教!
------解决方案--------------------
int的最高位是符号位,这样他就可以表示负数;
而unsigned int只用来表示正数,所以就不需要符号为了,这样一来,unsigned int可取的正数范围更大;
对于:
unsigned int a =6;
int b=-20;
cout<<a+b<<endl;
你可以看看C++ PRIMER 中5.12.2小节,书上说的更详细。
------解决方案--------------------
建议看下类型之间计算时候转换的规则
double<--float
↑
long
↑
unsigned
↑
int<--char、short
↑表示运算两边类型不一致时的转换顺序、<-表示即便两边类型一致依然要转换为箭头指向的数据类型再进行运算
再搜下整型提升
我在一些地方看到表达式中存在有符号类型和无符号类型时所有操作都自动转化为无符号类型。可是下面两个程序输出结果不一样,请教专家解惑。
#include <iostream>
using namespace std;
void main ()
{
unsigned int a =6;
int b=-20;
cout<<a+b<<endl;
}
这个程序输出4294967282,将int改成char,即程序为:
#include <iostream>
using namespace std;
void main ()
{
unsigned char a =6;
char b=-20;
cout<<a+b<<endl;
}
输出结果为-14.
望各位大神不吝赐教!
------解决方案--------------------
int的最高位是符号位,这样他就可以表示负数;
而unsigned int只用来表示正数,所以就不需要符号为了,这样一来,unsigned int可取的正数范围更大;
对于:
unsigned int a =6;
int b=-20;
cout<<a+b<<endl;
你可以看看C++ PRIMER 中5.12.2小节,书上说的更详细。
------解决方案--------------------
建议看下类型之间计算时候转换的规则
double<--float
↑
long
↑
unsigned
↑
int<--char、short
↑表示运算两边类型不一致时的转换顺序、<-表示即便两边类型一致依然要转换为箭头指向的数据类型再进行运算
再搜下整型提升