- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
这很尴尬,但按位 AND 运算符在 C++ 标准中定义如下(强调我的)。
The usual arithmetic conversions are performed; the result is the bitwise AND function of its operands. The operator applies only to integral or unscoped enumeration operands.
这对我来说似乎毫无意义。据我所知,标准中的任何地方都没有定义“按位与函数”。
我知道 AND 函数很容易理解,因此可能不需要解释。 “按位”一词的含义也应该相当清楚:函数应用于其操作数的相应位。但是,操作数的位是由什么构成的并不清楚。
什么给了?
最佳答案
这是未指定的。当标准提到按位操作时,标准的含义是一些缺陷报告的主题。
例如 defect report 1857: Additional questions about bits :
The specification of the bitwise operations in 5.11 [expr.bit.and], 5.12 [expr.xor], and 5.13 [expr.or] uses the undefined term “bitwise” in describing the operations, without specifying whether it is the value or object representation that is in view.
Part of the resolution of this might be to define “bit” (which is otherwise currently undefined in C++) as a value of a given power of 2.
得到的回应是:
CWG decided to reformulate the description of the operations themselves to avoid references to bits, splitting off the larger questions of defining “bit” and the like to issue 1943 for further consideration.
CWG decided at the 2014-06 (Rapperswil) meeting to address only a limited subset of the questions raised by issues 1857 and 1861. This issue is a placeholder for the remaining questions, such as defining a “bit” in terms of a value of 2n, specifying whether a bit-field has a sign bit, etc.
从这个defect report 1796: Is all-bits-zero for null characters a meaningful requirement?可以看出,这个标准在提到受影响/影响其他部分的位时意味着什么的问题:
According to 2.3 [lex.charset] paragraph 3,
The basic execution character set and the basic execution wide-character set shall each contain all the members of the basic source character set, plus control characters representing alert, backspace, and carriage return, plus a null character (respectively, null wide character), whose representation has all zero bits.
尚不清楚可移植程序是否可以检查 表示;相反,它似乎仅限于检查 对应于值表示的数字的位 (3.9.1 [basic.fundamental] 第 1 段)。可能更合适 要求空字符值比较等于 0 或 '\0' 而不是指定表示的位模式。
移位、按位与、和的定义也有类似的问题 按位或运算符:这些规范是对位的约束吗 表示的模式或从产生的值 将这些模式解释为数字?
在这种情况下,决议要改变:
representation has all zero bits
到:
value is 0.
请注意 as mentioned in ecatmur's answer C++ 标准草案确实遵循 C 标准第 5.2.4.2.1
节中的 3.9.1
[basic.fundamental] 段 >3
它没有引用 C 标准中的 6.5/4
部分,这至少会告诉我们结果是实现定义的。我在下面的评论中解释说,C++ 标准只能明确地合并来自规范性引用的文本。
关于c++ - a & b 的结果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29394518/
我是一名优秀的程序员,十分优秀!