Tag: 数据表示

代表C中的动态类型

我正在写一种动态类型的语言。 目前,我的对象以这种方式表示: struct Class { struct Class* class; struct Object* (*get)(struct Object*,struct Object*); }; struct Integer { struct Class* class; int value; }; struct Object { struct Class* class; }; struct String { struct Class* class; size_t length; char* characters; }; 目标是我应该能够将所有内容作为struct Object*传递,然后通过比较class属性来发现对象的类型。 例如,要转换一个整数以供使用,我只需执行以下操作(假设integer的类型为struct Class* ): struct Object* foo = bar(); // increment foo if(foo->class […]

C和C ++标准对位级整数表示和操作有何看法?

我知道C和C ++标准没有规定数字的特定表示(可以是二进制补码,符号和数量等)。 但我不清楚这些标准(并且无法确定是否已经说明)知道在使用位时是否存在任何特定的限制/保证/保留表示。 尤其: 如果整数类型中的所有位都为零,那么整数整数是否代表零? 如果整数类型中的任何位是1,整数整数是否表示非零? (如果这是“是”,则会对符号和幅度等一些表示进行额外限制) 是否有保证的方法来检查是否有任何位未设置? 是否有保证的方法来检查是否设置了任何位? (#3和#4类型依赖于#1和#2,因为我知道如何设置,例如某些变量x的第5位(参见#5),我想检查变量y以查看如果它的第5位为1,我想知道if if (x & y)是否有效(因为据我所知,这取决于表示的值而不是该位是否实际为1或0)) 是否有保证的方法来设置最左边和/或最右边的位? (至少比一个char c更简单的方法是所有位都为真(由c = c | ~c )并且做c = c << (CHAR_BIT – 1)来设置高位和c = c ^ (c << 1)对于低位,假设我不做任何假设,我不应该,鉴于这些问题) 如果#1的答案是“否”,那么如何迭代整数类型的位并检查每个位是1还是0? 我想我的整体问题是:C和C ++标准是否有关于位和整数的限制/保证/保留表示,尽管事实上没有规定整数的表示(如果C和C ++标准在这方面不同) ,他们的区别是什么?) 我在做作业时提出了这些问题,这需要我做一些操作(注意这些不是我作业的问题,这些都是“抽象的”)。 编辑:关于我所说的“位”,我的意思是“值形成”位而不包括“填充”位。