gpt4 book ai didi

c++ - 为什么 uint8_t + uint8_t 会产生一个 int?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:07 26 4
gpt4 key购买 nike

<分区>

我注意到,对于 8 位变量的简单操作,变量在操作完成之前转换为 32 位 int,然后再转换回 8 位变量。

例如,这个 C++ 程序:

#include <iostream>
#include <cstdint>

int main( void )
{
uint8_t a = 1;
uint8_t b = 2;

std::cout << "sizeof(a) = " << sizeof( a ) << std::endl;
std::cout << "sizeof(b) = " << sizeof( b ) << std::endl;
std::cout << "sizeof(a+b) = " << sizeof( a+b ) << std::endl;

return 0;
}

产生以下输出:

sizeof(a)   = 1
sizeof(b) = 1
sizeof(a+b) = 4

所以我们可以理解发生的事情是:

uint8_t c = (uint8_t)((int)(a) + (int)(b));

显然,它似乎在this 中所说的C 规范中。论坛。

此外,在 Visual Studio 2013 中,编写

auto c = a + b; 

将鼠标指针悬停在c 上表示类型为int

问题是:

  • 为什么需要转换,为什么在规范中? (如果可能的话,有了答案,我希望通过外部信息来源阅读更多关于该主题的信息(例如 MSDN、cppreference)。)
  • 这对性能有何影响?

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