2015搜狗研发笔试题目集锦:涵盖内存字节序、递归与位操作

5星 · 超过95%的资源 需积分: 9 7 下载量 98 浏览量 更新于2024-07-21 收藏 209KB PDF 举报
在搜狗2015年的校园招聘研发类笔试题中,测试了应聘者的基础编程概念、数据结构和算法理解、计算机体系结构以及对递归和指针操作的理解。以下是题目详解: 1. **内存字节序与数值表示**: - 小端字节序(LittleEndian)意味着低字节存储在内存的低地址处,高字节在高地址。根据题目,整数0x12345678被分成了四个字节存储,0x3(地址偏移为2)对应的是最低字节。因此,在LittleEndian字节序中,地址0x3处存放的字节是0x78。 2. **递归函数与边界条件**: - 第二题要求分析`foo`函数的递归调用情况。函数首先检查输入是否小于等于0,如果是,则返回1。否则,执行3*foo(x-1, y/2)。给定输入(3, 5),函数不会进入递归,直接返回3*foo(2, 2.5)。由于y不为整数,向下取整后为2,但递归不会继续进行,因为x减1会变为1,小于等于0。所以,输出结果为3。 3. **递归函数再次应用**: - 第三题的`foo`函数与上题类似,但参数不同。当x=20, y=13时,函数会递归调用,直到x或y小于等于0。最终结果为3*foo(4, 6.5),由于x仍大于0,会继续递归,直到x减到0。所以,输出为3。 4. **位操作和逻辑运算**: - 第四题考察了对位操作的理解。`fun`函数通过位操作`x |= x + 1`实现二进制计数器,直到`x+1`变为0。对于输入2014,函数返回n的值,即2014二进制表示中的1的数量,这等于5。 5. **数组、指针和类型转换**: - 第五题中,`*(a+1)`和`*(ptr-1)`分别访问数组元素和指针指向的元素。数组`a`的第二个元素是2,而`ptr`实际上是数组的下一个元素地址,所以`*(ptr-1)`实际上是指向数组第一个元素的指针,值为1。因此输出是2, 1。 6. **C语言和内存计算**: - 最后一个问题涉及了`sizeof`运算符在不同情况下的使用。`sizeof(str_arg)`将返回数组的大小,`sizeof(str)`和`sizeof(p)`分别计算字符串`str`和指针`p`本身的大小。在Linux的64位系统中,`char`类型的大小通常为1个字节,所以`sizeof(str_arg)`可能是100,`sizeof(str)`是1(因为`str`是一个字符),而`sizeof(p)`取决于指针的大小,通常是8(在64位系统中)。`func`调用中,`sizeof(str_arg)`也会输出100,但具体输出取决于`func`内部的操作。 这些题目涵盖了计算机基础知识、编程技巧、递归理解以及特定环境下的内存管理和C语言特性,旨在测试应聘者的编程基础和逻辑思维能力。