我正在尝试检查有关2的补码加法,减法等溢出的一些功课答案,我想知道我是否可以指定数据类型的大小。例如,如果我想看看当我尝试将-128或-256分配给7位无符号整数时会发生什么。
答案 0 :(得分:3)
在进一步阅读时,我发现你想要的是不正常的位大小,比如7位和9位等。 您可以使用位域
来实现此目的struct bits9
{
int x : 9;
};
现在您可以使用此类型bits9
,其中只有一个字段x
,其大小仅为9位。
struct bits9 myValue;
myValue.x = 123;
答案 1 :(得分:1)
对于任意大小的值,您可以在结构中使用bitfields。例如,对于7位值:
struct something {
unsigned char field:7;
unsigned char padding:1;
};
struct something value;
value.field = -128;
答案 2 :(得分:0)
您拥有的最小尺寸是char,它是一个8位整数。您可以使用未签名和签名的字符。看一下stdint.h标题。它以独立于平台的方式为您定义int类型。也没有7位整数这样的东西。
答案 3 :(得分:0)
使用内置类型,您可以使用以下内容:
char value1; // 8 bits
short value2; // 16 bits
long value3; // 32 bits
long long value4; // 64 bits
请注意,Windows上的Microsoft编译器就是这种情况。 C标准没有规定除#34之外的确切宽度;这个宽度必须至少与另一个一样大#34;等等 如果您只关心特定平台,则可以打印出类型的大小,并在您弄清楚它们之后使用它们。
或者,您可以使用C99标准中的stdint.h
。它具有名称中宽度的类型以使其清晰
int8_t value1; // 8 bits
int16_t value2; // 16 bits
int32_t value3; // 32 bits
int64_t value4; // 64 bits