我知道 C 和 C++ 标准没有规定数字的特定表示(可能是二进制补码、符号和大小等)。但是我不太了解标准(并且无法找到是否已说明),无法知道在使用位时是否有任何特定的限制/保证/保留表示。特别:
- 如果整数类型中的所有位都为零,那么整个整数是否代表零?
- 如果整数类型中的任何一位为 1,那么整数作为一个整体是否表示非零?(如果这是“是”,那么像符号和大小这样的一些表示将受到额外限制)
- 是否有保证的方法来检查是否未设置任何位?
- 是否有保证的方法来检查是否设置了任何位?(#3 和#4 取决于#1 和#2,因为我知道如何设置,例如某个变量中的第 5 位(参见 #5)
x
,我想检查一个变量y
以查看它是否是第 5 位是 1,我想知道是否if (x & y)
可行(因为据我了解,这取决于表示的值,而不是该位实际上是 1 还是 0)) - 是否有保证的方法来设置最左边和/或最右边的位?(至少比采用 a所有位为
char c
真(由c = c | ~c
c = c << (CHAR_BIT - 1)
c = c ^ (c << 1)
- 如果#1 的答案是“否”,如何遍历整数类型的位并检查每个位是 1 还是 0?
我想我的总体问题是:C 和 C++ 标准对位和整数是否有任何限制/保证/保留表示,尽管整数的表示不是强制性的(如果 C 和 C++ 标准在这方面有所不同,他们有什么区别)?
我在做作业时提出了这些问题,这需要我做一些操作(注意这些不是我作业中的问题,这些问题更加“抽象”)。
编辑:至于我所说的“位”,我的意思是“价值形成”位,不包括“填充”位。