作为抽象,C++是否支持表示两个以上值之一的"位"?

Lig*_*ica 12 c++ language-lawyer

[C++11: 1.7]以位为单位讨论字节:

C++内存模型中的基本存储单元是字节.一个字节至少足以包含基本执行字符集(2.3)的任何成员和Unicode UTF-8编码形式的八位代码单元,并由连续的位序列组成,其数量为实现定义.最低有效位称为低位; 最重要的位称为高位.C++程序可用的内存由一个或多个连续字节序列组成.每个字节都有一个唯一的地址.

但是,我找不到标准中定义"位"的任何地方.

那么说C++不会对可能由单个位表示的值的数量进行限制吗?

是否允许三态位?

Lig*_*ica 6

[C++11: 1.2]"ISO/IEC 9899:1999,编程语言 - C"中列出的规范性参考文献中.

反过来,这个标准说:

[C99: 3.5]: 执行环境中的1位数据存储单元足以容纳可能具有两个值之一的对象

这并不排除有点像数据存储单元甚至更大,因此C++作为一种语言确实可以支持三态位.

  • 在计算中,`bit`是明确的,与字节不同.它只能有2个值,通常用0和1表示.它也是"二进制数字"的简写.信息理论定义它有些不同,它是一条只能有2个值的信息. (5认同)
  • 出于真正的好奇心,是不是"两个*值之一"并不合理地认为"两个"推断"只有两个"? (3认同)
  • @Basile:标准似乎留下了"其操作数的一个补码"的定义(对于`~`,`5.3.1/10`)和"按位`AND`函数"(``5.11.1`)读者.因此,三态位系统可以定义这些,C++必须接受这一点.我想它还需要重新定义新位系统的补码. (2认同)
  • 一位是二进制数字,基数2,没有别的.我很惊讶两种标准都定义了"位"是什么.它违反了未经规定的标准规则和要求编写:*您没有定义具有明确,明确,普遍意义的事物.*与`sqrt`比较:该功能有什么作用?"`sqrt`函数计算x的非负平方根." 什么是非负平方根?它没有定义,因为每个人都知道它是什么.这是明确的.所以是"有点". (2认同)
  • 哈珀柯林斯数学词典,**位***n.缩写.为*二进制数字.......只是其中之一.标准委员会没有定义它在编写标准时使用的每个字,原因很简单,标准永远不会出现.您正在扮演语言律师,但您忘记了法律(和标准)具有潜在的"合理的人"概念.特点不是一点点.说有点模棱两可,这可能是一个特点,违反了理性的人的概念. (2认同)

nos*_*nos 2

3.9.1.7 说

\n\n
\n

类型 bool、char、wchar_t 以及有符号和无符号整数类型\n 统称为整数类型。48) 整数类型\n 的同义词是整数类型。整数类型的表示应使用纯二进制计数系统定义\n值。49) [示例:此\n国际标准允许 2\xe2\x80\x99s 补码、1\xe2\x80\x99s 补码和\n整数类型的有符号大小表示。\xe2\x80\x94 结束示例]"

\n
\n\n

注释49上写着

\n\n
\n

使用二进制数字 0\n 和 1 的整数位置表示,其中连续位表示的值\n 是可加的,从 1 开始,并乘以连续的整数\n 2 次幂,位可能除外排名最高。\n(改编自美国国家信息处理系统词典\n。)

\n
\n

  • 打语言律师,例子和注释都不规范。 (7认同)