gpt4 book ai didi

c++ - 为什么 C++ 将 unsigned char 值打印为负数?

转载 作者:太空狗 更新时间:2023-10-29 20:01:59 52 4
gpt4 key购买 nike

我正在尝试理解 C++ 中的隐式转换规则,并且我了解到当两种主要类型之间存在一个操作时,“低级类型”被提升为“高级类型”,所以让我们说:

int a = 5;
float b = 0.5;

std::cout << a + b << "\n";

应该打印 5.5 因为 'a' 被提升为 float 类型。我还了解到,无符号类型是比有符号计数器部分“更高的类型”,因此:

int c = 5;
unsigned int d = 10;

std::cout << c - d << "\n";

打印 4294967291 因为 'c' 被提升为无符号整数,并且由于无符号类型在小于零时回绕,我们得到了那个大数字。

但是对于以下情况,我不明白为什么我得到的是 -105 而不是正数。

#include <iostream>

int main(void) {
unsigned char a = 150;
std::cout << static_cast<int>(a - static_cast<unsigned char>(255)) << "\n";
return 0;
}

我猜这段代码:

a - static_cast<unsigned char>(255)

结果应该是正数,这样最终的转换(到 int)不应该影响最终结果,对吗?

最佳答案

您错过了从 unsigned charint 的(隐式)转换,它恰好执行了 -(减法)操作。每当您尝试将任何整数运算应用于小于 int 的某个整数类型的值时,就会发生这种整数提升。

关于c++ - 为什么 C++ 将 unsigned char 值打印为负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48372792/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com