为什么在调用函数时会unsigned char自动提升为int?在下面的示例中,有一个f(int)和一个f(char)函数.似乎更合乎逻辑的是编译器会强制unsigned chara char和a 的参数,f(char)因为它们具有相同的位数.它正在调用f(int),即使这意味着将参数提升为具有更多位的类型.指向规则定义的指针?标准或编译器/平台特定?
#include <iostream>
void f( int key )
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
void f( char key )
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
int main( int argc, char* argv[] )
{
int a = 'a';
char b = 'b';
unsigned char c = 'c';
f(a);
f(b);
f(c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
生成此输出:
void f(int)
void f(char)
void f(int)
Run Code Online (Sandbox Code Playgroud) 我正在将一个 Objective-C iOS 应用程序移植到使用 Lua 的 CoronaSDK。我有一个带符号的16 位整数,我想隔离其中的高字节和低字节。在 C 中,您可以简单地执行以下操作:
uint8_t a = (dx >> 8) & 0xff;
uint8_t b = dx & 0xff;
Run Code Online (Sandbox Code Playgroud)
Lua 没有按位运算符。我怎样才能在 Lua 中做到这一点?这是用于扩展 Lua 的移动应用程序和外部二进制库,如果有的话,很可能无法在所有设备上运行。您可以建议针对此问题的任何纯 Lua 解决方案吗?