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

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

相信大家对于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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19




对于这个问题,我的理解是: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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值