有关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;
}

这里写图片描述

对于这个问题,我的理解是: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
发出的红包

打赏作者

杨博东的博客

请我喝瓶可乐鼓励下~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值