gpt4 book ai didi

c++ - 位域。为什么没有输出?

转载 作者:行者123 更新时间:2023-11-30 01:41:20 24 4
gpt4 key购买 nike

#include <iostream>
using namespace std;
struct bitfield
{
unsigned char a : 3, b : 3;
};

int main()
{
bitfield bf;
bf.a = 7;
cout << bf.a;
char c;
cin >> c;
return 0;
}

我正在使用 VC++ 及其最新的编译器。当我键入 cast bf.a to int 时,它会给出所需的输出 (7)。但是当我不输入它时,它没有输出也没有错误。为什么会这样?

最佳答案

您正在打印值为 7 的字符。其他人指出这是一个通常不显示的特殊字符。将您的值转换为 int 或其他非字符整数类型以显示值,而不是字符。去看看the ascii table你会看到字符 7 是 BEL(铃)。

#include <iostream>
using namespace std;
struct bitfield
{
unsigned char a : 3, b : 3;
};

int main()
{
bitfield bf;
bf.a = 7;
cout << (int)bf.a; // Added (int) here
char c;
cin >> c;
return 0;
}

编辑 1:由于 bf.a 只有 3 位,因此不能将其设置为任何可显示的字符值。如果增加它的大小,则可以显示字符。将其设置为 46 会给出句点字符。

#include <iostream>
using namespace std;
struct bitfield
{
unsigned char a : 6, b : 2;
};

int main()
{
bitfield bf;
bf.a = 46;
cout << bf.a;
char c;
cin >> c;
return 0;
}

编辑 2:参见 This answer关于使用位域和 char

关于c++ - 位域。为什么没有输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41474209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com