首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在未符号空号范围外输入整数后,打印无符号短值的规则是什么?

问在未符号空号范围外输入整数后,打印无符号短值的规则是什么?
EN

Stack Overflow用户
提问于 2020-04-24 10:49:50
回答 1查看 373关注 0票数 1
代码语言:javascript
复制
#include <iostream>
#include <climits>
int main(void) {
    std::cout << SHRT_MIN << std::endl;
    std::cout << SHRT_MAX << std::endl;
    //-32768 ~ 32767 is the range
    short a;
    std::cin >> a;
    std::cout << "decimal: " << a << std::endl;//decimal
    return 0;
}

看看上面的代码,它用来观察当我在空范围外输入一个整数时会发生什么。

当我输入任何小于-32768的整数时,比如-3333333,-32768将被打印出来.

当我输入任何大于32767的整数时,比如3333333,32767将被打印出来。

现在,我想看看当我在无符号短裤范围之外输入一个整数时会发生什么。

下面是代码:

代码语言:javascript
复制
#include <iostream>
#include <climits>
int main(void) {
    std::cout << USHRT_MAX << std::endl;
    unsigned short a;
    std::cin >> a;
    std::cout << "decimal: " << a << std::endl;//decimal
    return 0;
}

似乎没有USHRT_MIN,但我认为最小的是0。

因此,无符号短线的范围0~ 65535是范围。

当我输入任何大于65535的整数时,比如3333333,65535将被打印出来。

现在出现了一个让我很困惑的部分。

当我输入小于0的整数时,

代码语言:javascript
复制
-1, decimal: 65535
-2, decimal: 65534
-3, decimal: 65533
-4, decimal: 65532
...
-65534, decimal: 2
-65535, decimal: 1
-65536, decimal: 65535
-65537, decimal: 65535
-65538, decimal: 65535
-65539, decimal: 65535
-3333333, decimal: 65535

从-1到-65535,a的打印值似乎有一个模式.

从-65536到任何较小的负数,a的打印值始终保持为65535 .

在短的范围外输入一个整数似乎是一个很容易遵循的规则。

对于像我这样的初学者来说,在无符号短的范围之外输入一个整数是很难理解的。

在未符号空号范围外输入整数后,打印无符号短值的规则是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-04-24 11:01:55

只需添加一个检查,以确定>>是否发出了问题信号:

代码语言:javascript
复制
#include <iostream>
#include <climits>

int main(void) {
    std::cout << USHRT_MAX << std::endl;
    unsigned short a;
    if (!(std::cin >> a))
      std::cout << "wrong ";
    std::cout << "decimal: " << a << std::endl;//decimal
    return 0;
}

汇编和执行:

代码语言:javascript
复制
pi@raspberrypi:/tmp $ g++ -Wall c.cc
pi@raspberrypi:/tmp $ ./a.out
65535
-1
decimal: 65535
pi@raspberrypi:/tmp $ ./a.out
65535
-2
decimal: 65534
pi@raspberrypi:/tmp $ ./a.out
65535
70000
wrong decimal: 65535
pi@raspberrypi:/tmp $ ./a.out
65535
-70000
wrong decimal: 65535
pi@raspberrypi:/tmp $

事实上,如果您超出了范围,但没有考虑已签名/未签名,则会发出错误信号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61406628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档