C/C++复习笔记(1)

这是一篇针对学习《程序员面试宝典》过程中的笔记,这本书的质量先不去考量,他其中确实涉及了不少虽然编程过程中一般用不到但确实是有必要注意的东西,而且又是各个企业的历史真题,总有值得学习的东西。

也算临时抱佛脚吧(`?ω?′)

内容可能会比较杂,排版可能也会比较乱

MarkDown导出,有的地方会有一点点乱


杂+CH5

先序遍历

根左右

字符数组/整形数组初始化

char a[4] = { ‘\0‘ };
int b[4] = { 0 };

结构体相关的

ListNode * tmp = (ListNode *)malloc(sizeof(ListNode));

访问成员时
(*tmp).m_keytmp->m_key等价

强转

(int &)a*((int *)&a)等价

int a = 3; //整型变量a
int * b = 4; //b中存放的是一个地址,这个地址指向一个整型变量
int &c = a; //c是引用,其实也就是a的一个别名,引用要在声明的同时初始化,并且不能修改

其实也就是将a转换成整形变量的地址,输出的时候由于整型和其他类型如float不一样,输出的内容也就不一样了

指针

int * p = 0;
int * p = NULL;

等价

int * p = 1; //这是错的

还有

int a = 5;
int *p = &a;

这个竟然还纠结了一下,基本功不够扎实

枚举

enum eN { a,b,c };
eN aa = a;
eN bb = eN::b;

两种方法都是可以的,第二个的话可能更清晰一些吧我觉得

啦啦

charshort在运算前会转换成int

具体的问题我给忘了

有符号数无符号数

unsigned int a = 0xFFFFFFFF; //是可以的,而且转成十进制也正确
int b  = 0xFFFFFFFF; //不是说不可以,只不过对有符号数来说,正数最大到0x7FFFFFFF,
//再大的就是负数了。会和想象不太符合,具体的转换啥的也有必要再看看,不过暂时放一放

//嗯,取反加一s

小端储存

对于跨子节的数据,低字节放在低地址,高字节放在高地址

0x12345678,放在这样四个内存单元中,0x0000000,0x000000010x000000020x00000003,那么0x00000000中存放0x780x00000003中存放0x12

于是想顺手分析一下这个题

#include<stdio.h>

int main(){
    unsigned int a = 0xFFFFFFF7;
    unsigned char i = (unsigned char)a;
    char *b = (char *)&a;

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

char型是一个字节,强转之后有截断,截断舍弃高字节,也就是从低字节开始保留,于是unsigned int a = 0xFFFFFFF7;,截断后剩下unsigned char i = 0x000000F7

然后是下一行,将a的地址转换成char型地址,高三个字节被舍弃,但*b是有符号的,而且此时截断完以后的数据首位是1,也就是符号位是1,于是根据符号位扩张,前面的那24位用1填充,于是输出的就是0xFFFFFFF7

整型提升

计算前会把数提升到至少整型再计算,包括~

unsigned a = 0xA5;
unsigned b = ~a>>4+1;

a = 1010 0101,计算前转为整型的话就是0000 0000 1010 0101,优先级上的话,~>+>>>,于是就是1111 1111 0101 1010>>5然后再截取,也就是1111 1010也就是250。

运算符的优先级

优先级 运算符 例子 结合顺序
1 () [] -> . :: ++ —   ->
2 ! ~ ++ — - + * & (type) sizeof   <-
3 -> .   ->
4 * / %   ->
5 + -   ->
6 << >>   ->
7 < <= > >=   ->
8 == !=   ->
9 &   ->
10 ^   ->
11 \     ->
12 &&   ->
13 \ \     ->
14 ?:   <-
15 = += -= *= /= %= &= ^= \ = >>= <<=   <-
16 ,   ->

运算符问题 面试例题3

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

x&y是取与,也就是两个数相同的位,仔细思考一下,实际上两个相同的位最后只拿了一个,也就是说,相当于除以2了,后面((x^y)>>1)的右移也是除以2,不过后面的是两个数不同的位,还是有一点点厉害的!!

讲道理,面试真给了这题……能做出来的几率有点可怜,擦!

下面的那个例题是一个意思,位运算做和,那也就是(x&y)<<1 + (x^y)

时间: 2024-12-24 23:58:32

C/C++复习笔记(1)的相关文章

安卓开发复习笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)

记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果,但作为学习,还是需要来了解下这个新引入类FragmentTabHost 之前2篇文章的链接: 安卓开发复习笔记——TabHost组件(一)(实现底部菜单导航) 安卓开发复习笔记——TabHost组件(二)(实现底部菜单导航) 关于Fragment类在之前的安卓开发复习笔记——Fragment+ViewPager组件(高仿微信界面)也介绍过,这里就不再重复阐述了. 国际惯例,先来张效果图: 下面

计算机图形学 复习笔记

计算机图形学 复习笔记 (个人整理,仅做复习用 :D,转载注明出处:http://blog.csdn.net/hcbbt/article/details/42779341) 第一章 计算机图形学综述 研究内容 图形的概念:计算机图形学的研究对象 能在人的视觉系统中产生视觉印象的客观对象 包括自然景物.拍摄到的图片.用数学方法描述的图形等等 图形的要素 几何要素:刻画对象的轮廓.形状等 非几何要素:刻画对象的颜色.材质等 图形表示法 点阵表示 枚举出图形中所有的点,简称为图像. 参数表示 由图形的

安卓开发复习笔记——Fragment+ViewPager组件(高仿微信界面)

什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开发复习笔记——ViewPager组件(仿微信引导界面)>,不清楚的朋友可以看看,这里就不再重复. 什么是Fragment? Fragment是Android3.0后新增的概念,Fragment名为碎片,不过却和Activity十分相似,具有自己的生命周期,它是用来描述一些行为或一部分用户界面在一个Activity中,我们可以合并多个Fragment在一个单独的activity中建立多个UI面板,或

安卓开发复习笔记——WebView组件

我们专业方向本是JAVA Web,这学期突然来了个手机App开发的课设,对于安卓这块,之前自学过一段时间,有些东西太久没用已经淡忘了 准备随笔记录些复习笔记,也当做温故知新吧~ 1.什么是WebView? WebView(网络视图)能加载显示网页,可以将其视为一个浏览器,它使用了WebKit渲染引擎加载显示网页. 废话不多说,直接上代码 1.需要在xml布局文件中声明WebView组件 1 <WebView 2 android:id="@+id/webview" 3 androi

[Java基础] Java线程复习笔记

先说说线程和进程,现代操作系统几乎无一例外地采用进程的概念,进程之间基本上可以认为是相互独立的,共享的资源非常少.线程可以认为是轻量级的进 程,充分地利用线程可以使得同一个进程中执行多种任务.Java是第一个在语言层面就支持线程操作的主流编程语言.和进程类似,线程也是各自独立的,有自 己的栈,自己的局部变量,自己的程序执行并行路径,但线程的独立性又没有进程那么强,它们共享内存,文件资源,以及其他进程层面的状态等.同一个进程内的 多个线程共享同样的内存空间,这也就意味着这些线程可以访问同样的变量和

oracle从入门到精通复习笔记续集之PL/SQL(轻量版)

复习内容: PL/SQL的基本语法.记录类型.流程控制.游标的使用. 异常处理机制.存储函数/存储过程.触发器. 为方便大家跟着我的笔记练习,为此提供数据库表文件给大家下载:点我下载 为了要有输出的结果,在写PL/SQL程序前都在先运行这一句:set serveroutput on结构:declare--声明变量.类型.游标begin--程序的执行部分(类似于java里的main()方法)exception--针对begin块中出现的异常,提供处理的机制--when...then...--whe

IOS开发复习笔记(3)-ARC

1.ARC 当你自己调用了release或retain语句的时候,ARC有效时编译文件会遇到错误,你可以通过-fno-objc-arc和-fobjc-arc两个编译器标志在混搭中支持ARC和非ARC的代码 如下面编译支持ARC,而文件代码不支持ARC # if !__has_feature(objc_arc) //this code do not support to ARC -(void) release{ //release your var } #endif 在ARC工程中集成非ARC的第

数据库系统概论 复习笔记。

大学课本复习笔记,知识点总结. 2012-08-15 数据模型中的 型,Type, 学号,姓名.... 值,Value, 0001, Ender..... 数据库系统的三级模式,两级映射, 外模式,External Schema/Sub Schema, 是用户能看得到的直接使用的.一个数据库有多个外模式,应用于用户的不同需求.但每个应用程序只能使用一个外模式.保证安全.每个用户只能访问对应的外模式. 模式,Schema, 是数据库中全体数据的逻辑结构和特征的描述,只涉及 型Type的描述.模式的

安卓开发复习笔记——TabHost组件(实现底部菜单导航)

安卓开发复习笔记——TabHost组件(实现底部菜单导航) 4 来源:cnblog    阅读:1048   时间:2014-09-16 什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用windows操作系统的时候,经常见到如图所示的图形界面. TabHost选项卡,说到这个组件,不得不先说一件事情,翻翻谷歌提供给我们的API,我们可以发现这样的一段话: 它告诉我们,这个组件在安卓4.0之后已经被废弃了,建议我们新的程序应该使用Fragment组件

IOS开发复习笔记(4)-TableView

总结几个TableView常用的代码 初始化方面 static string CellIndetifier="cellIndetifier"; -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;//表中段数 } -(NSInterger)tableView:(UITableVIew *)tableView numberOfRowsInSection:(NSInteger)section{