long 和 unsigned long 的奇怪现象(实在无法解释)
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;
}
这种现象又消失了。
这到底是怎么回事呢?
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;
}
这种现象又消失了。
这到底是怎么回事呢?
...全文
相关推荐
93C46系列应用问题
针对93C46晚上正常使用,白天无法正常工作的现象,考虑到温度可能是关键因素。温度变化可能影响到芯片内部电路的性能,或者MCU在不同温度下的工作状态。
附库函数附库函数附库函数
下面将详细解析这些知识点:### 库函数的概念#### 定义库函数是指那些由他人编写的、已经过多次测试和验证的成熟代码集合。在C语言中,这些库函数被组织成各种不同的库,以方便程序员调用。
C++隐式转换问题分析及解决办法
隐式转换的问题----------------隐式转换可能引发一些问题,例如:* 无符号类型和带符号类型的转换可能会导致奇怪的结果,例如 unsigned int 和 int 的转换。
memset的初浅体会
因此,实际上 npBuffer 数组中的每个元素可能不是 1,而是某个奇怪的值。那么,为什么 memset 函数不能正确地将数组元素设为某个特定的值呢?
51单片机模拟串口的三种方法
单片机的延时是通过执行若干条指令来达到目的的,因为每条指令为1-3个指令周期,可即是通过若干个指令周期来进行延时的,单片机常用11.0592M的晶振,现在我要告诉你这个奇怪数字的来历。


