《程序员面试宝典》学习记录1

本文是《程序员面试宝典》学习的第一部分,主要涵盖程序设计基本概念,包括赋值语句、类型转换、运算符、变量交换与比较,以及C与C++的关系。讨论了赋值运算符的逻辑运算、i++的细节、类型转换的影响、运算符优先级,以及在C++中如何处理C语言函数的调用问题。
摘要由CSDN通过智能技术生成

《程序员面试宝典》学习记录1

第5章 程序设计基本概念
1、赋值语句
1)

x == (y=z); //先将z赋值给y,之后看x和y是否相等
x = (y==z); //先看y是否等于z,相等返回布尔值1,否则返回布尔值0
x = (y & z); //先求y与z的位与,之后赋值给x
x = (y && z); //先将y与z进行与运算,之后返回布尔值,赋值给x

总结:== && ||属于逻辑运算符,返回值为bool值

2)

x = x & (x-1); //x转化为二进制后包含1的数量

2、i++问题

#include<stdio.h>
main()
{
    int b = 3;
    int arr[] = {6,7,8,9,10};
    sint *ptr = arr;
    *(ptr++) += 123;
    printf("%d\n", *(ptr-1)); //输出129
    printf("%d\n", *ptr); //输出7
    printf("%d,%d\n", *ptr, *(++ptr)); //输出8,8
}

总结:1)printf计算参数时候,是从右到左压栈的,所以最后一句要注意
2)*(ptr++)先取ptr指向的内容,之后在ptr+1
3)(*ptr)++先取ptr指向的内容,之后将指向的内容+1

3、类型的转换
1)

float a;
int(&a);

作用是因为浮点数在内存里和整数的存储方式不同,这相当于把该浮点数地址开始的sizeof(int)个字节当成int型的数据输出,只有当a = 0时候,int a才会和int(&a)相同。
2)

#include<stdio.h>
int main()
{
    unsigned int a = 0xFFFFFFF7;
    unsigned char i = (unsigned char)a;
    char *b = (char*)&a;

    printf("%08x, %08x", i, *b);
}

输出结果为000000f7,fffffff7
总结:前者为unsigned int 变量赋值给unsigned char变量时,会发生字节的截断,3位和高于3位的将会被程序自动丢弃;后者为将unsigned int 型指针转化为一个char型的指针,这个影响的是指针的寻址
4、运算符的问题
1)

#include<iostream>
using namespace std;
int main()
{
    unsigned char a = 0xA5;
    unsigned char b = ~a>>4+1;
    printf("b=%d\n", b);
    return 0;
}

运行结果为250.
总结:C/C++运算符优先级口诀! ~ ++ -- & + - >> << == != ^ | && || ?:
所以可以知道+优先级别比>>要高,所以先计算4+1故可以知道先取a反之后在右移5位;
这里还有一个特别容易错的地方,我们不能将0xA5转化为1010 0101我们应该写成16进制,之后因为unsigned char只能表示低8位的数值,所以为250.

2)用一个表达式判断一个数是否是2的N次方,不能用循环语气

!(X & (X-1))

3)用一个表达式取两个数的平均值

return((x & y) + (x ^ y) >> 1)

x&y取相同的位与;(x^y) >> 1取x和y的不同位,之后取平均
4)利用位运算实现两个整数的加法运算

int Add(int a,int b)
{
    if(b == 0)
        return a;//没有进位
    int sum, carry;
    sum = a ^ b; //完成没有进位的加法运算
    carry = (a & b) << 1; //完成即为并且左移运算
    return Add(sum. carry); //递归相加
}

5、a、b交换与比较
1)找出两个数中比较大

int max = ((a+b) + abs(a-b))/2; //方案1
int pair[2] = {a,b}; return pair[a < b]; //方案2

2)a与b进行交换

a = a ^ b;//用异或语句
b = a ^ b;
a = a ^ b;

6、C和C++的关系
1)在C++程序中调用被C编译器编译后的函数,为什么要加extern "C"?
C++语言支持函数重载,C语言不支持,假设某个函数的原型为void foo(int x,int y)该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字,作用解决名字匹配的问题。
2)C语言是一种结构化语言,重点在于算法和数据结构,C程序的设计首先要考虑的是如何通过一个过程对输入进行运算处理得到输出;而对于C++首先要考虑的是如何构造一个对象模型,让这个模型能够契合与之对于的问题域,通过获取对象的状态信息得到输出或实现过程的控制。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《pan程序员面试宝典第五版》是一本非常经典的计算机编程方向面试参考书籍,涵盖了数据结构、算法、操作系统、编译原理、计算机网络、数据库等多个方面的知识点和众多编程面试题。本书内容详实且精准,对于准备应聘计算机编程岗位的求职者是非常有帮助的。 同时,本书还对应聘者的面试技巧和面试流程进行了详细的介绍,让读者对求职过程有更加全面的了解,提高了应对面试的能力。此外,书中还专门梳理了一些优质的面试题解和参考答案,帮助读者理解面试题的解题思路和方法,提高了应对编程面试的成功率。 总之,《pan程序员面试宝典第五版》是一本非常实用的面试参考书籍,对于求职者来说,该书的研读绝对是一次无价的投资。 ### 回答2: 《pan程序员面试宝典第五版》是一本热门的技术面试指南,主要介绍了软件工程师所需的知识、算法和面试技巧。该书内容广泛,覆盖了面试必须掌握的数据结构、算法、操作系统、计算机网络、数据库、软件工程等方面的知识,还提供了大量实用的面试技巧与策略。该书不仅适合正在找工作的程序员,也适合计算机科学或软件工程专业的学生。 该书的特点在于涵盖范围较广,细节讲解到位,并且提供了大量的例题和考前复习笔记,帮助读者更好地掌握知识点。此外,该书不仅包含了算法和数据结构等技术内容,还介绍了各种面试场景和常见问题,提供了面试的技巧和策略。作者还提供了许多面试自测题目,让读者自测自评,不断提升自己的面试能力和技巧。 总之,《pan程序员面试宝典第五版》是一本非常实用的技术面试指南,对于准备参加技术面试的程序员或计算机科学或软件工程专业的学生来说都是非常值得推荐的。它不仅可以帮助读者更好地掌握技术知识,还有助于提高面试能力和技巧。推荐给各位程序员和计算机科学或软件工程专业的学生! ### 回答3: 《pan程序员面试宝典》第五版,是一本涵盖了面试所需所有知识点和面试技巧的书籍。这本书基于作者多年的面试经验,总结出了面试官常考的面试题目,并且给出了详细的解答以及样例代码。 该书主要分为三个部分:基础知识、算法与数据结构以及系统设计。基础知识包括常用数据类型、操作系统、计算机网络、数据库等基础知识;算法与数据结构涵盖了常用算法和数据结构的实现方式和使用场景;系统设计则包括如何设计分布式系统、负载均衡、缓存等。 此外,书中还介绍了如何在面试中表现自己的优势以及如何回答面试问题。其中,引人注目的一章是关于“逆向面试”的讨论,通过分析常见的逆向面试问题,帮助读者更好地理解面试官的思考过程,从而更好地回答问题。 总之,这本书是一本非常实用的面试指南,通过学习书中的内容,读者可以更好地准备面试,提高自己的面试技能,更容易拿到心仪的工作机会。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值