【问题标题】:Is it possible to send decimal value(8 bit) in bool ? If Yes then How? [duplicate]是否可以在 bool 中发送十进制值(8位)?如果是,那么如何? [复制]
【发布时间】:2017-01-29 08:30:36
【问题描述】:

bool is 8 bits long

如上所述,bool 是 8 位长。 那么是否可以在bool 变量中发送值 2。 即

0000 0010 -> 2

(十进制表示)

例如:bool x;

如何在上面的布尔变量“x”中发送这个“2”?

谢谢

【问题讨论】:

  • 你可以试试reinterpret_cast<char&>(x) = 2; 但实际上,如果你想将 2 设置为变量,你根本不应该使用 bool。
  • 你可以,但是一旦你执行了,行为是不确定的。 任何事情都可能发生。
  • 在某些人的系统上是 8 位长。阅读您链接的帖子。
  • 老实说,对于这个问题,bool至少 8 位就足够了,并且 那个 语句在任何地方都是正确的。跨度>

标签: c++ c++11


【解决方案1】:

不是在 C++ 中,不是。 bool 可以容纳 truefalse。如果不首先调用未定义的行为,就无法将2 存储在bool 中。一旦你调用了未定义的行为,任何事情都可能发生。 (包括您在向重要客户演示时所期望的除了)。

另外,bool 不一定是 8 位长。它必须至少与 char 一样大(因为 sizeof(bool) 必须至少为 1),并且 unsigned char 可以容纳的值范围的限制意味着它必须至少为 8 位。 OTOH,没有什么可以阻止使用大于charbool 的实现,实际上有些实现char 是32 位或64 位(主要是DSP 芯片)。

【讨论】:

  • 另外一个提到演示恐怖!
  • 我不知道,但我想 std::vector 专业化每个元素可以使用少于 1 个字节。
  • @Matt:没错,但它不包含实际的bool 变量(spit!)。
  • @MartinBonner,是的,但它会阻止你在其中存储 2。
【解决方案2】:

bool 是 8 位长

不一定是的。所有标准都说它必须能够容纳truefalse:它的sizeof实现定义的。您可以推断它必须至少 1,因为sizeof类型 必须是整数类型,并且不能为零,否则指针算术bools 的数组上会中断。

所以不要尝试发送值 2 - 你一定会渲染你的程序的行为undefined

【讨论】:

  • 实际上,bool 必须至少 8 位 -sizeof 确实是实现定义的,但必须至少为 1,char 必须至少为 8 位.
  • 确实如此。我已经把它塞进去了。不过我还是更喜欢你的回答。
猜你喜欢
  • 2023-03-04
  • 2019-08-25
  • 2011-07-22
  • 1970-01-01
  • 2015-08-26
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
相关资源
最近更新 更多