当前位置:  开发笔记 > 编程语言 > 正文

unsigned int/signed int/long long:无法解释的输出

如何解决《unsignedint/signedint/longlong:无法解释的输出》经验,为你挑选了1个好方法。

所以我正在玩各种类型,下面我得出了这个奇怪的结果.调试它没有任何意义,然后唯一的结果是检查c ++ spects,这没有多大帮助.我想知道你是否可能知道这里发生了什么,如果它是32Bit和/或64Bit具体问题.

#include 
using namespace std;

int main() {
    unsigned int u = 1;
    signed int i = 1;

    long long lu = -1 * u;
    long long li = -1 * i;

    std::cout<<"this is a weird " << lu << " " << li << std::endl;

    return 0;
}

输出的位置

this is a weird 4294967295 -1

Kerrek SB.. 5

关键的观察是表达式-1 * u是类型的unsigned int.这是因为算术转换规则*说,如果一个操作数是unsigned int另一种是signed int,那么后者操作数转换unsigned int.算术表达式最终仅针对同构操作数定义,因此转换在操作正确之前发生.

转换为-1to 的结果unsigned int是一个大的正数,可以表示为a long long int,它是您在输出中看到的数字.

目前,那是[expr] /(11.5.3).



1> Kerrek SB..:

关键的观察是表达式-1 * u是类型的unsigned int.这是因为算术转换规则*说,如果一个操作数是unsigned int另一种是signed int,那么后者操作数转换unsigned int.算术表达式最终仅针对同构操作数定义,因此转换在操作正确之前发生.

转换为-1to 的结果unsigned int是一个大的正数,可以表示为a long long int,它是您在输出中看到的数字.

目前,那是[expr] /(11.5.3).

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有