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);
}
因为alarm 1st参数是unsigned int,这就是为什么它可以将-5转换为无符号值。如果我在第二次报警时发出任何负值报警,它只返回2147483647?为什么会这样......任何理论?
答案 0 :(得分:0)
原因是你指定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。