为什么带符号的char可以拥有比127大的值?

CătălinaSîrbu
int main()
{
    char MCU = 0b00000000;
    char al_av = 0b10100000;

    // Before bit operation
    cout << "MCU = " << int(MCU) << endl;

    MCU = MCU | al_av;

    // After the bit operation
    cout << "MCU = " << int(MCU) << endl;   // Expected 160, got -96

    char temp = 160;

    cout << temp;   // got the a with apostrophe

    return 0;
}

我期望输出为char temp负数(或警告/错误),因为160超过了[-127,127]间隔,但是结果是ASCII表中的那个(带撇号的a

关于cpp参考

char-可以在目标系统上最有效处理的字符表示形式的类型(具有与有符号字符或无符号字符相同的表示形式和对齐方式,但始终是不同的类型

我不明白用斜体写的内容(也不确定这个问题是否有很大帮助)。是否有任何隐式转换?

YSC

为什么带符号的char可以拥有比127大的值?

这不可以。

char x = 231;

在这里,有一个(隐式)整数转换:231是类型prvalue在将其转换为(在您的系统上签名)之前int取值您可以要求编译器通过发出警告-25char-Wconstant-conversion


char-可以在目标系统上最有效处理的字符表示形式的类型(具有与有符号字符或无符号字符相同的表示形式和对齐方式,但始终是不同的类型

我不明白用斜体写的是什么

这不涉及到什么类型可以持有,它只是保证了三种类型charsigned charunsigned char具有共同的特性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在C ++ 11中带符号的char -127到127的范围?

为什么这里没有将带符号的char转换为unsigned int?

为什么我可以返回对函数拥有值的引用?

为什么C ++中带符号和无符号字符的ascii值会有所不同?

为什么没有为127到159的ASCII值定义符号

为什么带符号整数的绝对值方法不返回无符号值?

为什么我可以将值大于127的int传递给char数组,而不是直接传递给char数组?

使用无符号而不是带符号的int更有可能导致错误吗?为什么?

为什么 ch1 == ch2 是假的,它不是拥有相同的 char 值吗?

无符号char数组的指针和他的指针具有相同的值,为什么?

为什么32位带符号整数最大值在c#中增加1后变为最小值?

为什么JavaScript没有比比较运算符严格的大/小?

为什么 IntoIter 不拥有这些值?

为什么此函数返回(拥有的)值?

为什么我的向量被重置而不是拥有自己的值?

为什么C ++数组索引值是带符号的,而不是围绕size_t类型构建的(或者我错了)?

为什么std ::没有比“ <”更好?

为什么我可以将char *隐式转换为const char *,而不是无符号char *

为什么dlsym()返回的符号值可以为null?

为什么用C语言为每个带符号的int类型都必须有一个对应的无符号的int类型?

为什么C ++不接受带符号或无符号字符数组

为什么在这种情况下打印-1?(带符号字符vs无符号字符)

为什么将带符号的负数转换为无符号的数?

从char向量中读取带符号的数字

在什么情况下会在C ++中使用带符号的char?

从带符号的char到整数的值初始化,过早提升?

当最小值在Android中可以是带符号的数字时,如何确定最小值?

具有无符号值的位移位给出带符号的结果

Pod 拥有比预期更多的资源