gpt4 book ai didi

linux - SIGALRM 以负数给出秒的常数值

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:16 27 4
gpt4 key购买 nike

achul@achul:~/chennai/linux/SM_practise$ cat doubt.c
#include<stdio.h>
#include<signal.h>
main()
{
int ret;
printf("\nhello x : if i'm give -ve alarm second then what it will return \n");
ret=alarm(-5);
printf("ret=%d\n",ret);//
ret=alarm(8);
printf("ret=%d\n",ret);// why exactly 2G
while(1);
}

因为警报第一个参数是无符号整数,所以可能是将 -5 转换为无符号值。如果我在第二个警报中给出任何负值警报,它只返回 2147483647 吗?为什么会这样……有什么理论吗?

最佳答案

原因是您为延迟指定了 4+ 十亿 (4,294,967,296 - 5) 秒——大约 136 年。

这就是将 signed int 提升为 unsigned int 时发生的情况。 alarm() 的声明是:

unsigned int alarm (unsigned int seconds);

-5 作为 32 位值在 twos-complement 中为 1111 1111 1111 1111 1111 1111 1111 1011 (这是所有现代 CPU 使用的)二进制。

将该位模式视为一个 unsigned int 使其值为 4,294,967,291。

关于linux - SIGALRM 以负数给出秒的常数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33839135/

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