自2月28日开班至今,已半月有余。在这半个多月的时间里我收获良多。 首先申明,c是信仰! 在来黑马上课之前,我只是单纯的看过几个片段的视频课,没有什么基础。 来黑马上课之后,明显的感觉基础有提升,更重要的是有一群志同道合的同学一起努力奋斗。 基础课上重复了一遍C语言的语法,然后每讲一个知识点后都有时间自己敲代码去真正掌握。 然后就是遇到不懂的地方可以找大佬、助教或者讲师讲解。(当年自学时,最大的坑) 再细细的数下课余收获: 开班第一天,和同学大佬讨论了C语言和c++在io的区别,讨论了scanf和cin对于输入溢出的处理机制: cin对于接收的数值溢出时,会将该类型最大数值复制给变量; scanf对于溢出的数值,先将输入存储于缓冲区,然后将缓冲区的的数据放入内存,溢出部分都抛弃。 scanf("%…) 读入正确返回值为1(溢出也属于正确),读入失败返回0(在输入超过20位数字时,实际赋值给变量的都位-1,cin也是一样,猜测是缓冲区的限度是20位) printf("") 返回值位打印的字符数(中文字算两个字符,空格换行等也算字符) hash的初步理解: 哈希算法相当于将不同的输入,选取一定的特征值,作为输出 来标记输入值。 把一个大的范围映射到一个小的范围,节省了空间,让数据更容易保存。 hash函数除了加密也常用于查找。 在考虑使用Hash函数之前,须要明确它的几个限制: 1. Hash的主要原理就是把大范围映射到小范围;所以,你输入的实际值的个数必须和小范围相当或者比它更小。不然冲突就会非常多。 2. 因为Hash逼近单向函数;所以,你能够用它来对数据进行加密。 3. 不同的应用对Hash函数有着不同的要求;比方,用于加密的Hash函数主要考虑它和单项函数的差距,而用于查找的Hash函数主要考虑它映射到小范围的冲突率。 /long | sca.out--stdin 管道符右边的可执行程序格式? stdin接收管道符传输的标准输入参数 计算机内的数据是以补码形式存储的,正数的补码和原码一样,负数的补码是原码的反码+1; unsigned转换之后的数据即是该数据的补码,除去符号位的影响。 if(n&1)可以判断奇偶性。 >>1效果等同/2 ^异或 相同取0 不同取1 ~ 取反 int a; a=(a=20,a*3);合法成立 实际过程是先给a复制20,然后计算a*3,最后结果为60. 取余运算%,不能对小数操作,被除数和除数都不能为小数。 void (*f)(); //这里*f表示为一个函数,即f为函数指针 (void(*)()) //这个表达式就可以看做一个函数指针的转换符 (void(*)()) 0 //就是将0地址进行类型转换成一个函数指针 (*(void(*)())0) () //这里就是将转换过的0地址解引用,来调用其指向的函数 重点是将0看做地址,然后进行转换后调用 等效于: typedefvoid(*fp)(); //将fp定义为一个返回值为void 的函数指针 (*(fp)0)(); 位运算实现加减: 首先c=(a&b)<<1得出应该进1的位; 然后d=(a^b)得出相加没有进1的位; 再(c&d)<<1得出进一步进1的位.... 如果c&d为0,则返回c | d; 递归.... 这个过程相当于写竖式计算加减法,满2进1. 关于细节就不作过多描述了! 最后强调一下:C++天下第一!
|