【发布时间】:2017-01-11 13:13:54
【问题描述】:
我注意到对于 8 位变量的简单操作,在操作完成之前将变量转换为 32 位 ints,然后再转换回 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)。)
- 这对性能有何影响?
【问题讨论】: