c++语言面试,c语言面试问题
当i==0时,I-,I变成-1,-1打印成%u,结果是4294967295
示例6:
#包含stdio.h
#包含字符串. h
int main()
{
char a[1000];
int I=0;
for(I=0;i 1000我)
{
a[I]=-1-I;
}
printf(%d\n ,strlen(a));//输出255
//strlen()重点在于是否有\0,而\0的ASCII码值为0
返回0;
}
示例7:
#包含stdio.h
int main()
{
无符号字符I=0;//i的范围是0~255
for(I=0;i=255I )//所以循环条件不变
{
printf( hello world \ n );//无限循环打印
}
返回0;
}
【敲黑板】:以后使用无符号数一定要格外小心,需要慎重使用!
2.浮点数在内存中的存储(简单理解,少测试)下面是一个简单的例子:
#包含stdio.h
int main()
{
int n=9;
float * pFloat=(float *)n;
printf( n的值为:%d\n ,n);
printf( * p float 的值为:%f\n ,* p float);
* pFloat=9.0
printf( n的值为:%d\n ,n);
printf( * p float 的值为:%f\n ,* p float);
返回0;
}看到上面的代码,我们一定都有自己的答案让我们看看正确答案是什么样的
不意外,不意外,毛的回答为什么是这个样子?有问题就会有答案答案在后面
浮点数的存储规则
和n *pFloat在内存中显然是同一个数为什么浮点数和整数的解释结果差别这么大?要理解上述结果,就必须了解浮点数在计算机中的表示
详细解释:根据国际标准IEEE(电气和电子工程协会)754,任何二进制浮点数V都可以用以下形式表示:
(-1) s * m * 2 e (-1) s代表符号位,当S=0时,V为正;当S=1时,v为负,m代表有效数,大于等于1,小于22 e代表指数位
例如:
十进制的5.0,用二进制形式写就是101.0,相当于1.01 * 2 ^ 2根据上面V的格式,可以得出S=0,M=1.01,E=2
IEEE754规定:
对于32位浮点数,最高位是符号位S,接下来的8位是指数E,剩下的23位是有效数字m
对于64位浮点数,最高位是符号位S,接下来的11位是指数E,剩下的52位是有效数字m
当然,IEEE754对有效数字M和指数e有一些特殊的规定
前面说过,M=1m ^ 2,M可以写成1xxxxx
以xx的形式,其中
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。