说起来很惭愧,以前我在写代码的时候基本没注意有符号和没符号这种说法,基本就是拿过来就是撸,虽然有听过这个无符号和有符号是什么东东。。但是基本不用-_-||。
今天在学习的时候看到了相关的知识点记录一下。
有符号和无符号不能进行比较,加减乘除,如果进行这些操作,那么操作系统会先把有符号转成无符号,一个有符号的正数可能对程序结果没影响。负数的话,大家都知道在内存中是以补码的方式存储的,这个时候操作系统把负数转成无符号数据的话,那是相当大的。例子:
unsigned int a=20;signed int b=-100; a和b进行比较,我想我们想要的结果肯定是a大于b,但是输出的结果却是b大于a,因为b转成无符号数是相当大的。
下面输出点代码作为验证结果:
unsigned int a = 20;
signed int b = -100;
unsigned int c = b;
cout<<"a:"<<a<<std::endl;
cout<<"b:"<<b<<std::endl;
cout<<"c:"<<c<<std::endl;
cout<<a+b<<std::endl;
输出结果:
a:20
b:-100
c:4294967196
4294967216