位域。为什么没有输出?
Bitfields. Why is there no output?
#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 键入 int 时,它会给出所需的输出 (7)。但是当我不输入它时,它没有输出也没有错误。为什么会这样?
When i type cast bf.a to int it gives the desired output (7). But when
i dont type cast it, it gives no output and gives no errors. Why is it
so?
字符(数字 7)已写入控制台。字符 7 是 bell character.
所以你看不到它,但你可以听到它。或者更确切地说,当我 运行 程序时,我可以在 Windows 10 上听到通知声音。
生成相同的输出:
cout << '\a';
铃铛是可以用 escape sequences 引用的一组字符的一部分。
请注意,在这种情况下,char
位域的使用不受标准的限制运行。有关使用 char
位域的问题,请参阅 here。
你正在打印值为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:参见 关于使用位域和 char
。
不支持字符类型位域。
位域声明只支持4个标识符,
- 无符号整数
- 有符号整数
- 整数
- 布尔值
#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 键入 int 时,它会给出所需的输出 (7)。但是当我不输入它时,它没有输出也没有错误。为什么会这样?
When i type cast bf.a to int it gives the desired output (7). But when i dont type cast it, it gives no output and gives no errors. Why is it so?
字符(数字 7)已写入控制台。字符 7 是 bell character.
所以你看不到它,但你可以听到它。或者更确切地说,当我 运行 程序时,我可以在 Windows 10 上听到通知声音。
生成相同的输出:
cout << '\a';
铃铛是可以用 escape sequences 引用的一组字符的一部分。
请注意,在这种情况下,char
位域的使用不受标准的限制运行。有关使用 char
位域的问题,请参阅 here。
你正在打印值为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:参见 char
。
不支持字符类型位域。
位域声明只支持4个标识符,
- 无符号整数
- 有符号整数
- 整数
- 布尔值