相关疑难解决方法(0)

无符号字符在函数调用中自动提升为int,为什么?

为什么在调用函数时会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)

c++

13
推荐指数
2
解决办法
1747
查看次数

C++ NOT按位运算符二进制字符转换

我正在从Primer第5版学习C++.其中一个问题是:

在具有32位整数和8位字符的机器上,''q'<< 6的值是多少,它使用拉丁-1字符集,其中'q'具有位模式01110001?

我感到困惑的是编译器会在〜之前或之前将'q'转换为32位int

据我所知,它应该这样工作:

'q' = 01110001

~'q' = 10001110

~'q' << 6 = 00000000000000000010001110000000
Run Code Online (Sandbox Code Playgroud)

我对吗?

c++ bit-manipulation

2
推荐指数
1
解决办法
333
查看次数

标签 统计

c++ ×2

bit-manipulation ×1