int main()
{
char a[1000];
int i;
for(i=0; i<1000; i++)
{
a[i] = -1-i;
}
printf("%d",strlen(a));
return 0;
}
此题看上去真的很简单,但是却鲜有人答对。答案是255
for 循环内,当i 的值为0 时,a[0]的值为-1。关键就是-1 在内存里面如何存储。
我们知道在计算机系统中,数值一律用补码来表示(存储)。主要原因是使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。正数的补码与其原码一致;负数的补码:符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1。
按照负数补码的规则,可以知道-1 的补码为0xff,-2 的补码为0xfe……当i 的值为127时,a[127]的值为-128,而-128 是char 类型数据能表示的最小的负数。当i 继续增加,a[128]的值肯定不能是-129。因为这时候发生了溢出,-129 需要9 位才能存储下来,而char 类型数据只有8 位,所以最高位被丢弃。剩下的8 位是原来9 位补码的低8 位的值,即0x7f。
当i 继续增加到255 的时候,-256 的补码的低8 位为0。然后当i 增加到256 时,-257 的补码的低8 位全为1,即低八位的补码为0xff,如此又开始一轮新的循环……
按照上面的分析,a[0]到a[254]里面的值都不为0,而a[255]的值为0。strlen 函数是计算字符串长度的,并不包含字符串最后的‘\0’。而判断一个字符串是否结束的标志就是看是否遇到‘\0’。如果遇到‘\0’,则认为本字符串结束。
分析到这里,strlen(a)的值为255 应该完全能理解了。这个问题的关键就是要明白char类型默认情况下是有符号的,其表示的值的范围为[-128,127],超出这个范围的值会产生溢出。另外还要清楚的就是负数的补码怎么表示。弄明白了这两点,这个问题其实就很简单了
分享到:
相关推荐
C语言面试题C语言面试题C语言面试题C语言面试题C语言面试题
c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关...
关于C语言基础方面的一些练习题,也有一点面试题,带一点嵌入式C基础方面的应用题。
c语言程序面试题,word格式,可以看看,能有所收获
c语言和c++语言面试题,软件工程师面试题
C语言面试题C语言面试题
华为C语言面试题集 C语言面试题-华为C语言面试题 深圳华为面试
华为公司的C语言面试题,供有意参加面试和学习的朋友参考。试题不多但是比较经典
经典C语言面试题.7z经典C语言面试题.7z经典C语言面试题.7z经典C语言面试题.7z经典C语言面试题.7z经典C语言面试题.7z经典C语言面试题.7z经典C语言面试题.7z经典C语言面试题.7z经典C语言面试题.7z经典C语言面试题.7z...
超全的C语言嵌入式工程师笔试面试题汇总,C语言版嵌入式工程师笔试面试题
C语言面试题库, C语言题库, 助你面试轻松过关!
这16个题,你可以先做一下,再看答案,我保证。。。。。。 还是先下载看了再说好吧
C语言软件工程师面试题.pdf
C语言面试题大汇总_C语言,面试题,汇总2.PDF C语言面试题大汇总_C语言,面试题,汇总2.PDF C语言面试题大汇总_C语言,面试题,汇总2.PDF C语言面试题大汇总_C语言,面试题,汇总2.PDF
这是一本关于c c++程序员面试的电子书 里面包含了程序员面试基础知识 常见c语言面试题 程序员面试技巧 华为面试题 百度面试题 金山面试题 腾讯面试题 中兴面试题 google面试题 绝对是经典
C语言面试100题(含答案)。 例题1: /* 下列给定程序的功能是:读入一个整数k(2=),打印它的所有质因子(即所有素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。 请改正程序中的错误,使程序能...
C语言面试题大汇总C语言面试题大汇总C语言面试题大汇总
c语言面试题集(单片机) 1.预处理器(Preprocessor) 2.死循环(Infinite loops) 3.数据声明(Data declarations) 4.关键字Static 5.关键字Const 6.关键字Volatile 7.位操作(Bit manipulation) 8.访问固定的...
C语言面试题_嵌入式开发.C语言面试题C语言面试题_嵌入式开发.C语言面试题C语言面试题_嵌入式开发.C语言面试题
整理了好久的c笔试题和程序员面试题集合,看一大半就能应付大部分企业的笔试面试了。