gpt4 book ai didi

c - 计算有符号整数的最大大小

转载 作者:行者123 更新时间:2023-12-04 09:24:54 26 4
gpt4 key购买 nike

我想知道time_t可以容纳的最大值,所以我写了一个小程序来帮助我。它需要一个参数:字节数(1字节= 8位)。因此,我编写并测试了它。它适用于从1到4的所有值,但在5或更高时,它也会编辑“有符号”位(我不知道它的调用方式)。有人可以解释:

#include <stdio.h>

int main(int argc, const char **argv) {
if(argc != 2) {
fprintf(stderr, "Usage: %s bits/8\n", argv[0]);
return -1;
}

unsigned int bytes;
sscanf(argv[1], "%u", &bytes);

unsigned int i;
signed long long someInt = 0;
size_t max = bytes*8-1;
for(i = 0; i < max; i++) {
someInt |= 1 << i;
}

/* Print all bits, we substracted
1 to use in the previous loop so
now we add one again */
max++;
for(i = 0; i < max; i++) {
int isAct = (someInt >> max-i-1) & 1;
printf("%d", isAct);
if((i+1) % 8 == 0) {
printf(" ");
}
}
printf("\n");

printf("Maximum size of a number with %u bytes of 8 btis: %lld\n", bytes, (long long)someInt);

return 0;
}


我的测试:

Script started on Sun Jan 30 16:34:38 2011
bash-3.2$ ./a.out 1
01111111
Maximum size of a number with 1 bytes of 8 btis: 127
bash-3.2$ ./a.out 2
01111111 11111111
Maximum size of a number with 2 bytes of 8 btis: 32767
bash-3.2$ ./a.out 4
01111111 11111111 11111111 11111111
Maximum size of a number with 4 bytes of 8 btis: 2147483647
bash-3.2$ ./a.out 5
11111111 11111111 11111111 11111111 11111111
Maximum size of a number with 5 bytes of 8 btis: -1
bash-3.2$ ./a.out 8
11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111
Maximum size of a number with 8 bytes of 8 btis: -1
bash-3.2$ exit
exit

Script done on Sun Jan 30 16:35:06 2011


我希望可以从中学到这一点,因此,如果有人能抽出一些时间来研究这一点,我将非常感激。

ief2

最佳答案

您仅将int(即1)用于移位操作。这个

someInt |= 1LL << i;


我想会更好。

通常,我不知道要获得带符号整数类型的最大值,而该整数类型仅具有typedef而不会冒未定义行为或编译器和平台特定属性的风险。例如, <<运算符可能在符号类型上有问题。

time_t尤其奇怪,因为它可能是浮点类型或整数类型。如果是整数,则不指定是否带符号。

如果您认为它是一个带符号的整数类型,并且没有所谓的填充位(大多数平台都遵循该填充位),则可以直接计算最大值

((((1LL << (sizeof(time_t)*CHAR_BIT-2)) - 1) << 1) + 1)


没有溢出。

关于c - 计算有符号整数的最大大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4843737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com