[C++11: 1.7]
以位为单位讨论 bytes :
C ++内存模型中的基本存储单元是字节。一个字节至少足以包含基本执行字符集(2.3)的任何成员和Unicode UTF-8编码形式的八位代码单元,并由连续的位序列组成,其数量为实现定义。最低有效位称为低位;最重要的位称为高位。 C ++程序可用的内存由一个或多个连续字节序列组成。每个字节都有一个唯一的地址。
但是,我在标准中找不到定义“位”的任何地方。
那么说C ++不会对可能由一位表示的值的数量设置限制吗?
是否允许三态位?
答案 0 :(得分:6)
[C++11: 1.2]
中列出的规范性参考文献中有“ISO / IEC 9899:1999,编程语言 - C”。
反过来,这个标准说:
[C99: 3.5]:
1 位 执行环境中的数据存储单元足以容纳可能的对象 有两个值之一
这并不排除有点像数据存储的单位,甚至更大,所以C ++作为一种语言确实可以支持三态位。
答案 1 :(得分:2)
3.9.1.7说
类型bool,char,wchar_t以及有符号和无符号整数类型 统称为整数类型.48)整数类型的同义词 是整数类型。整数类型的表示应定义 使用纯二进制计算系统的值.49)[例子:这个 国际标准允许2的补码,1的补码和 整数类型的有符号幅度表示。 - 结束例子“”
注释49
读取
使用二进制数字0的整数的位置表示 和1,其中由连续位表示的值是 添加剂,以1开头,并乘以连续积分 2的幂,除了位置最高的位。 (改编自美国国家信息词典 处理系统。)
答案 2 :(得分:1)
我不同意接受的答案,因为这可以由三元机器模拟,规范明确允许这样做。
§3.9.1/ 4无符号整数,声明无符号整数,应遵守算术模2 n 的定律,其中n是整数特定大小的值表示中的位数。登记/> §1.8/ 5简单可复制或标准布局类型(3.9)的对象应占用连续的存储字节。
§3.9/ 9算术类型(3.9.1)......统称为标量类型。标量类型,......这类类型的数组......统称为POD类型。标量类型......,这类类型的数组......统称为平凡可复制类型 §3.8/ 2对于任何具有简单可复制类型T
的对象,无论对象是否包含类型T
的有效值,组成对象的基础字节都可以复制到数组中char
或unsigned char
。如果将char
或unsigned char
数组的内容复制回对象,则该对象应随后保持其原始值。
这里的问题是,在所有方面,所有可复制的多字节对象的状态必须可以与char
的数组复制并且不会丢失。这意味着模拟基本2机器的三元机器(具有模数“翻转”的基本算术类型所需)必须模拟每个模拟字节到下一个 unsigned 中的下一个翻转多字节算术运算。
即使这可以在三元机器上慢慢地模拟,但是如果所有原始类型都由41个trits组成,那么编译器必须担心的是unsigned rollover / under,这可能是可行的。 (显然,模仿^
,|
和&
也很慢,但这不是我心中的问题)我认为可以完成,但是为三元机器制作符合标准的C ++编译器是非常不切实际的。