long 和 unsigned long 的奇怪现象(实在无法解释)

BestSky BestSky 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
static long clktck = 0;

if( clktck == 0 )
if( ( clktck = sysconf(_SC_CLK_TCK)) < 0 )
err_sys("sysconf error");

首先是运行上述代码想得到系统时钟频率,但是得到的值始终是0,后来将起改成
static unsigned long clktck = 0;

if( clktck == 0 )
if( ( clktck = sysconf(_SC_CLK_TCK)) < 0 )
err_sys("sysconf error");

居然就对了,取道了100的数值。很奇怪,本来100这么小,对于signed和unsigned应该一样才对。
然后简单写了个程序再测试

int main()
{
unsigned long a = 100;
long b = 100;
return;
}
这次更加奇怪,我在GDB中调试,运行到打印命令的时候,a的值为100,b的值为 8665408,十六进制为 0x843940,请问这个如何解释?这种情况瓦连续运行了两遍,所以,应该不是由于寄存器缓冲之类的原因把。
后来瓦将上述代码加了一句输出,如下,
int main()
{
unsigned long a = 100;
long b = 100;

printf("%ld\n\n%ld\n\n",a,b);
return;
}
这种现象又消失了。
这到底是怎么回事呢?
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
BestSky
Linux/Unix社区 23,224 成员 74,535 内容