有关unsigned和有符号类型的区别

来源:互联网 发布:gta5优化好吗 编辑:程序博客网 时间:2024/04/29 19:19

相信大家对于unsigned这个玩意并不陌生,但是有的时候却会被它搞懵,比如下面:

#include<iostream>using std::cout;using std::cin;using std::endl;int main(int argc,char *argv[]){    char a = 255;    char b = 256;    unsigned char c = 255;    unsigned char d = 256;    cout << (int)a << endl;    cout << (int)b << endl;    cout << (int)c << endl;    cout << (int)d << endl;    return 0;}

这里写图片描述

对于这个问题,我的理解是:unsigned和普通有符号类型我们都可以将其看做是一个钟表,以char为例,如下所示:
这里写图片描述

如上面的代码所示,从0-127是不改变的,然后实际上128 = -128,129 = -127又依次循环到256 = 0,这就能解释为什么255 = -1了。实际上unsigned和有符号的区别就在于大于128之后的部分。
这里写图片描述

和无符号类型的相似,在128之后不是从-128再次开始,而是一直到256就归0了,然后再继续,所以相当于unsigned就将同类型的无符号类型的扩大了一倍。

对于类型选择问题,有下面三个原则:

1:要是确定是无符号类型就用unsigned

2:要是int类型大小不够,就用long long,因为int一般和long是一样大的。

3:要是考虑到精度的问题,能用double的就用double不用float

0 0