我注意到,对于8位变量的简单操作,变量int
在操作完成之前转换为32位s,然后转换回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;
}
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
sizeof(a) = 1
sizeof(b) = 1
sizeof(a+b) = 4
Run Code Online (Sandbox Code Playgroud)
所以我们可以理解发生的事情是:
uint8_t c = (uint8_t)((int)(a) + (int)(b));
Run Code Online (Sandbox Code Playgroud)
显然,它似乎在本论坛中所说的C的规范中.
另外,在Visual Studio 2013中,编写
auto c = a + b;
Run Code Online (Sandbox Code Playgroud)
将鼠标指针悬停在上方c
表示该类型为int
.
问题是:
归档时间: |
|
查看次数: |
915 次 |
最近记录: |