鸡啄米相关笔记

第一节

 1.对象。每个对象都是描述客观存在事物的一个实体,都是由数据和方法(也可以叫属性和行为)构成。属性是描述事物特征的数据,行为描述对对象属性的一些操作。

       2.类。类是具有相同属性和行为的一些对象的集合,它为所有属于这个类的对象提供抽象的描述,比如麻雀和杜鹃都可以看作是对象,而鸟就可以看作类。

       3.封装。封装就是把对象的所有属性和行为结合成一个独立的单位,对外隐藏对象的内部细节,只保留有几个接口与外界联系。

       4.继承。一个类(叫做子类)可以通过继承另一个类(叫做父类)来拥有另一个类的所有属性和行为。比如车和汽车,汽车从车继承,车的所有属性和行为都继承到了汽车上。

       5.多态性。多态性就是说父类中的属性和行为被子类继承后,子类可以有自己不同于父类的属性或行为。比如定义一个类“动物”,它具有“吃”这个行为,但是具体怎么吃吃什么,不知道,因为不知道到底是个什么“动物”,如果从这个类继承出子类“羊”和“老虎”,“吃”就成了具体的行为,怎么吃吃什么就都知道了。

第二节

那十进制怎么转换为二进制呢,可以将十进制数连续除以R,其每个余数就是R进制数各个数位上的数字,最后的余数是最高位。比如将68转换成二进制数,用除2取余法:

 2∟68                       余数
 2∟34 ············0       低位
 2∟17 ············0
 2∟8 ·············1
 2∟4 ·············0
 2∟2 ·············0
 2∟1 ·············0
  0  ················1       高位

       结果就是6810 =10001002,将68转换为八进制数就用除8取余法。

  十进制小数转换成二进制小数,整数部分仍按上述方法转换,小数部分则乘以2,然后将结果的整数位取出作为转换最终结果的一位,再用去掉整数位的小数再乘以2,之后循环这样执行,直到小数部分为0或者达到所要求的精度为止,取出的这些整数位第一位为最高位。例如,将十进制小数0.3125转换成二进制小数: 

        0.3125×2 = 0.625        取出0,为最高位

扫描二维码关注公众号,回复: 1855576 查看本文章

        0.625×2 = 1.25            取出1,剩下的小数为0.25

        0.25×2 = 0.5                取出0

        0.5×2 = 1.0                  取出1,小数位为0,不再继续

       结果就是0.312510 =0.01012 。所以将十进制数68.3125转换成二进制数就是1000100.0101。

位:这是数据的最小单位,表示一位二进制数据。

字节:由八位二进制数据组成。字节是数据存储中最常用的基本单位。我们常说内存有2G,这里的单位就是字节。1K等于1024字节,1M等于1024K,1G等于1024M。

字:位的组合,作为一个独立的信息单位处理。取决于机器的类型、字长及使用者的要求。常用的固定字长有8位、16位、32位等。

机器字长:讨论信息单位时,有个与机器硬件指标有关的单位就是机器字长,一般指参加运算的寄存器所含有的二进制数的位数,它代表了机器的精度,如32位、64位等。就是我们常说的32位机器还是64位机器。

为了让计算机计算起来更简单,硬件设计起来也比较简单,人们研究了多种二进制编码方法。其实就是对负数的不同编码,正数基本不变。

1.原码

        刚才鸡啄米讲到的最高位是符号位,后面是绝对值来表示一个数,这种编码叫做“原码”。但是有个问题,就是0的表示不唯一,+0就是000...0,-0就是1000...0。另外,进行四则运算时,对于符号位都要单独处理,同号怎样运算,异号又怎样运算,有时还需要借位,这对计算机来说是很麻烦的,所以必须找更好的编码方法。

2.反码

        其实反码不怎么用,但是怎么说是一种编码方式,而且是求补码的中间码,我们还是需要学一下的。

        正数的反码跟原码一样,负数的反码的符号位跟原码一样,但其余各位取反,也就是0变1,1变0。例如,二进制数+1100111的原码是01100111,反码也是01100111,-1100111的原码是11100111,反码则是10011000。

3.补码

        大家想下,如果现在是7点,但是鸡啄米的表时间是9点,那怎样才能把它调准呢?鸡啄米可以往前调2个小时,也可以往后调10个小时,结果都是7点。这里就涉及到取模运算(以前我们叫求余运算),9-2 = 7,(9+10)%12 = 7,这里的%就是C++里的取模运算符。2与10对模数12是互为补数的。补码就是利用的这个原理,利用补码可以把减法运算变成两个补码相加,具体就是将其变为一个正数和一个负数的加法运算,然后计算这个正数和负数的补码,两个补码相加。因为补码的符号位作为数值参与运算,所以就不存在符号位单独处理的问题。

        正数的原码、反码和补码是一模一样的。

        负数的补码是其反码的最末位加1得到的,我们经常顺口记为负数的补码就是取反加1。

        必须要指出的是补码运算的结果也是补码,还要把它算到原码才得到最后结果。那么知道补码怎么计算原码,很简单,就是对补码再求补码就是源码了。

        鸡啄米给大家个例子:

       10-67 = ?,10的原码是00001010,补码跟原码一样,-67的原码是11000011,补码是10111101。两个补码相加是11000111,这是结果的补码,求原码要对这个补码再求补码,取反加1后就是10111001。

第三节

Win32 Console Application是Win32控制台程序,MFC Application是MFC应用程序,可以建立以开发界面程序,Win32 Project是Win32程序,Empty Project是空程序,MFC DLL用来建立生成动态链接库的工程,其它的不常用就不介绍了。我们要建立一个没有应用程序界面的只有Dos命令行界面的工程就选Win32 Console Application项,我们学习C++基础知识用这个就可以了。它跟Win32 Project的区别是,它的入口是main函数,而Win32 Project的入口是WinMain函数。

第四节

std是一个类(输入输出标准),它包括了cin成员和cout成员,using name space std ;以后才能使用它的成员。#include<iostream.h>中不存在类std,但是他又cin,out的相关函数,不需要使用命名空间了。而第二种标准#include<iostream>,它包含了一个类,在类的使用之前要预处理一下,using namespace std;就是这个功能,然后你就可以使用cin,cout这两个成员函数了,假设你不使用预处理(using namespace std;),麻烦加上std::cin或者std::cout再去使用它的成员函数(头文件中存在这个类)

std::cout是在#include<iostream>中的ostream类型中的对象

std::表示命名空间,标准库定义的所有名字都在命名空间std中

std::cout是在#include<iostream>库中的istream类型中的对象

std::cout<<a<<std::endl;

上条语句中<<是输入运算符,就是将大头的那边的量弄进箭头所指的对象中,并返回运算之后的箭头所指的对象

std::endl是一个操纵符,作用是结束当前行,并将与设备关联的缓冲区的内容刷到设备中,最好每个cout都加一个endl,利于清除缓存..

1.逗号运算符和逗号表达式

       逗号也是一个运算符,它的使用形式为:表达式1,表达式2。求这个表达式的值就要先解表达式1,然后解表达式2,最终这个逗号表达式的值是表达式2的值。比如计算a=1*2,a+3,应先计算a=1*2,结果为2,再计算a+3的值,a的值已经变成了2,再加上3为5,这个逗号表达式的最终结果就是5。 

  2.条件运算符和条件表达式

       C++中唯一的一个三元运算符是条件运算符"?"。条件表达式的使用形式是:表达式1?表达式2:表达式3。表达式1是bool类型的,表达死2,3可以是任何类型,并且类型可以不同。条件表达式的类型是表达式2和3中较高的类型,类型的高低后面介绍。条件表达式会先解表达式1,如果表达式1的值是true,则解表达式2,表达式2的值就是条件表达式的值,而如果表达式1的值是false,则解表达式3,其值就是条件表达式的最终结果。

3.位运算

位与:相同位的两个数字都为1,则为1;若有一个不为1,则为0    位或:相同位只要一个为1即为1。    位异:相同位不同则为1,相同则为0。

按位取反(~)。这是一个一元运算符。它对一个二进制数的每一位求反。    

移位。包括左移运算(<<)和右移运算(>>),都是二元运算符。移位运算符左边的数是需要移位的数值,右边的数是移动的位数。左移是按指定的位数将一个数的二进制值向左移位,左移后,低位补0,移出的高位舍弃。右移是按照指定的位数将一个数的二进制值向右移位,右移后,移出的低位舍弃,如果是无符号数则高位补0,如果是有符号数,则高位补符号位或0,一般补符号位。比如,char型变量的值是-8,则它在内存中的二进制补码值是11111000,所以a>>2则需要将最右边两个0移出,最左边补两个1,因为符号位是1,则结果为11111110,对其再求补码就得到最终结果-2。

4.iostream

数据从一个对象到另一个对象的流动我们一般称之为“流”,比如程序中的数据在屏幕上显示出来,我们可以想成数据从程序流向屏幕,就是输出流。从键盘输入数据就是输入流了。从流中获取数据叫做提取操作,向流中添加数据叫做插入操作。cin是系统预定义的输入流,用来处理标准输入即键盘输入。cout是预定义的输出流,用来处理标准输出,即屏幕输出。

      “<<”是预定义的插入符,它用在cout上可以实现屏幕输出。使用形式如下:cout<<表达式<<表达式...。这里可以连着多个表达式,输出多个数据到屏幕。这里的表达式可以是很复杂的表达式,系统会计算出这些表达式的值只把结果传给插入符<<,然后显示到屏幕上。例如,cout<<"a+b="<<a+b;会把"a+b="这个字符串和a+b的计算结果输出到屏幕。如果a=1,b=2;则屏幕上显示a+b=3。

      “>>”是提取符,用到cin上用来把键盘上输入的数赋值给变量。使用形式为:cin>>表达式>>表达式...。这里的提取符也可以有多个,每个后边跟一个表达式,这里的表达式一般是用来存放输入值的变量。比如,int a,b; cin>>a>>b;后面这个语句要求从键盘上输入两个整型数,两个数之间用空格分隔,如果输入 3 4,则变量a的值为3,b的值为4。

5.常用语句

1.break语句。break出现在switch语句或者循环体中时,程序直接从switch语句中或者循环体中跳出,继续执行下面的程序。

2.continue语句。continue语句用在循环体中时,用来结束本次循环,接着判断决定是否执行下一次循环,它跟break的区别是,比如,for(int i=0; i<5; i++)  { if(i==1) break; sum+=i; }这里如果循环到i等于1的时候for循环就会直接退出,而for(int i=0; i<5; i++)  { if(i==1) continue; sum+=i; }的情况是如果循环执行到i等于1的时候则sum+=i这个语句不执行了直接执行for后面括号里表达式3-i++,也就是进入i等于2的循环。

3.枚举变量

枚举类型的声明形式为:   enum  枚举类型名   {  变量值列表 };  变量值列表里都是整型变量,另外不要忘记最后面的分号

        比如,enum  weekday   { sun,mon,tue,wed,thu,fri,sat };

       这里的枚举元素sun、mon...都没有指定值,它们就使用默认值,依次为0,1,2...。即sun就是0,mon就是1,...sat是6。也可以在声明枚举类型时指定枚举元素的值,比如

       enum  weekday  { sun=7, mon=1, tue, wed, thu, fri, sat };

       这里sun就是7,mon是1,后面的值在mon的基础上依次加1,即tue等于2,wed为3...sat是6。枚举元素按常量处理,不能对它们赋值除了声明的时候,像sun=0;这样的语句就是非法的。

       枚举类型我们声明了以后就能像int、float等类型那样用了,可以定义枚举类型的变量。整数值需要赋给枚举变量时,应进行强制类型转换。

猜你喜欢

转载自www.cnblogs.com/qin5429/p/9256529.html