1.double和float的存储方式

float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。无论是单精度还是双精度在存储中都分为三个部分:

  1. 符号位(Sign) : 0代表正,1代表为负
  2. 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
  3. 尾数部分(Mantissa):尾数部分
         在计算机存储中,首先将数更改为二进制的科学计数法表示,8.25用二进制表示可表示为1000.01。120.5用二进制表示为:1110110.1用二进制的科学计数法表1000.01可以表示为1.0001*,1110110.1可以表示为1.1101101*。存储时,默认小数点前始终为1,但是1不存储。
           float.23bit。尾数部分,相当于可以表示的位数为24Bit,因此可以表示小数点后6位。同时,8位指数位要求表示-127----128范围的指数,因此总共可以表示256个指数。偏置量为1023。
          double.。类似float。指数表示-1023----1024个指数。尾数部分可以到小数点后13位。偏置量为1023。

             注意,由于涉及到负数存储。因此对于指数部分,float是+127,double是+2047后才存储的。

因此:(1)在单精度转换为双精度的时候,存在误差的问题,对于能够用二进制表示的十进制数据,如2.25,这个误差就会不存在。
         (2)0的单精度表示为0 0 0 0(1.0* 2^(-127))而-0的单精度表示为 -128 0 0 0(-1.0*2^(-127))。即表示存在误差。
<span style="font-size:18px;">float a = 1.0f;
cout<< (int)a <<endl;
cout<< (int&)a <<endl;
cout << boolalpha << ( (int)a==(int&)a ) << endl; // false float b = 0.0f;
cout<< (int)b <<endl;
cout<< (int&)b <<endl;
cout << boolalpha << ( (int)b==(int&)b ) << endl; // true </span>

2.C++构造函数的嵌套调用

class CLS
{
public:
static int i;
int m_i;
static int j;
CLS(int t): m_i(t) {
}
CLS()
{
CLS(100);
}
~CLS(){
}
};

调用1次构造函数相当于生成一个临时对象。此时该对象的m_i被赋值100,调用完后析构了此对象,但是当前的m_i实际没有初始化。


3.vector中的越界问题

int main(void)
{
vector array; array.push_back( 1 );
array.push_back( 2 );
array.push_back( 3 );
for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍历array数组
{
cout << array[i] << endl;
}
return 0;
}

size_type默认为无符号unsigned int 整型,当至最小数0-1,则产生的值为最大的数。


4.字符数组的初始化方法


char input[100];
cin.get(input,number,ch);//number表示最多读取的字符,ch表示遇到此字符则截止(默认为'\n'),但是截止符号仍然存在于输入流中
cin.getline(input,number,ch);//同上,唯一不同的是,遇到截止符,截止符号被从输入流中删除。
gets(input);//输入的时候以换行符作为结束,空格键和制表符正常写入。由于此函数不会检查是否溢出,程序员必须保证。


5.qsort和sort的用法总结

qsort

原型:

_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*));



解释:    qsort ( 数组名 ,元素个数,元素占用的空间(sizeof),比较函数) 

比较函数是一个自己写的函数  遵循 int com(const void *a,const void *b) 的格式。

当a b关系为 >  <  = 时,分别返回正值 负值 零 (或者相反)。

使用a b 时要强制转换类型,从void * 转换回应有的类型后,进行操作。

封装的是快速排序。

int num[100];
int cmp ( const void *a , const void *b )//int
{
return *(int *)a - *(int *)b;
}
qsort(num,100,sizeof(num[0]),cmp); char word[100];
int cmp( const void *a , const void *b )//char
{
return *(char *)a - *(int *)b;
}
qsort(word,100,sizeof(word[0]),cmp); double in[100];
int cmp( const void *a , const void *b )//double
{
return *(double *)a > *(double *)b ? 1 : -1;
}
qsort(in,100,sizeof(in[0]),cmp); struct In
{
double data;
int other;
}s[100]
int cmp( const void *a ,const void *b)//结构体一级
{
return ((In *)a)->data > ((In *)b)->data ? 1 : -1;
}
qsort(s,100,sizeof(s[0]),cmp); struct In
{
int x;
int y;
}s[100];
int cmp( const void *a , const void *b )//结构体二级
{
In *c = (In *)a;
In *d = (In *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}
qsort(s,100,sizeof(s[0]),cmp); struct In
{
int data;
char str[100];
}s[100];
int cmp ( const void *a , const void *b )//结构体按字符串排序
{
return strcmp( ((In *)a)->str , ((In *)b)->str );
} qsort(s,100,sizeof(s[0]),cmp);

sort


       但是注意到,functional提供了一堆基于模板的比较函数对象:equal_to<Type>、not_equal_to<Type>、greater<Type>、greater_equal<Type>、less<Type>、less_equal<Type>。可以直接拿来用。
  • 升序:sort(begin,end,less<data-type>());
  • 降序:sort(begin,end,greater<data-type>())
int a[]={2,4,1,23,5,76,0,43,24,65};
double b[]={2.0,4.1,1.2,23.0,5.7,76.23,0.0,43.78,24.14,65.45};
vector<int> vec(a,a+sizeof(a)/sizeof(int));
list<int> List(a,a+sizeof(a)/sizeof(int)); sort(a,a+sizeof(a)/sizeof(int));//升序
sort(a,a+sizeof(a)/sizeof(int),compare1);//降序
sort(a,a+sizeof(a)/sizeof(int),greater<int>());//降序 sort(b,b+sizeof(b)/sizeof(double));//升序
sort(b,b+sizeof(b)/sizeof(double),greater<double>());//降序
sort(b,b+sizeof(b)/sizeof(double),compare2);//降序 sort(vec.begin(),vec.end(),less<int>());//升序
sort(List.begin(),List.end(),greater<int>());//降序

其中,使用的自定义函数compare1和compare2分别为:

bool compare1(int a,int  b)
{
return a>b; //降序排列
}
bool compare2(double a,double b)
{
return a>b?true:false; //降序排列
}

7.成员函数指针

class A{
private:
int data;
public:
A(int i=0):data(i){}
string equal(const A& m){
if(m.data==data)
return "true";
else
return "false";
}
}; int main()
{
A a1(8),a2(4);
string (A::*p)(const A&);
p=&(A::equal);
cout<<(a1.*p)(a2)<<endl;
return 0;
}







C++知识点总结(6)的更多相关文章

  1. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  2. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

  3. UWP开发必备以及常用知识点总结

    一直在学UWP,一直在写Code,自己到达了什么水平?还有多少东西需要学习才能独挡一面?我想对刚接触UWP的开发者都有这种困惑,偶尔停下来总结分析一下还是很有收获的! 以下内容是自己开发中经常遇到的一 ...

  4. C#高级知识点&(ABP框架理论学习高级篇)——白金版

    前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...

  5. lucene 基础知识点

    部分知识点的梳理,参考<lucene实战>及网络资料 1.基本概念 lucence 可以认为分为两大组件: 1)索引组件 a.内容获取:即将原始的内容材料,可以是数据库.网站(爬虫).文本 ...

  6. DoraCMS 源码知识点备注

    项目需要研究了下DoraCMS这款开源CMS,真心做的不错:).用的框架是常用的express 4 + mongoose,代码也很规范,值得学习. 源码中一些涉及到的小知识点备注下: https:// ...

  7. atitit 商业项目常用模块技术知识点 v3 qc29

    atitit 商业项目常用模块技术知识点 v3 qc29 条码二维码barcodebarcode 条码二维码qrcodeqrcode 条码二维码dm码生成与识别 条码二维码pdf147码 条码二维码z ...

  8. HTML5知识点总结

    HTML5知识点总结(一) 一.HTML新增元素 1.IE9版本以下支持HTML5的方法 <!--[if lt IE9]> <script src="http://cdn. ...

  9. JavaScript易错知识点整理

    前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...

  10. Sqlserver中一直在用又经常被忽略的知识点一

    已经有快2个月没有更新博客了,实在是因为最近发生了太多的事情,辞了工作,在湘雅医院待了一个多月,然后又新换了工作...... 在平时的工作中,Sqlserver中许多知识点是经常用到的,但是有时候我们 ...

随机推荐

  1. 理解collate Chinese_PRC_CI_AS

    我们在create table时经常会碰到这样的语句,例如:password nvarchar(10)collate chinese_prc_ci_as null,那它到底是什么意思呢?不妨看看下面: ...

  2. Javascript-理解事件总结

    事件 [事件流]表述的是从页面接收事件的顺序.1.事件冒泡流:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档).所有浏览器都支持.2.事件捕获:与事件冒泡相反,事件捕获的用意在 ...

  3. Java_脚本引擎_01_用法入门

    一.前言 最近有个需求,需要在js中调用java,这样能避免更新java,从而实现代码的热更新. 于是想到用 Nashorn JavaScript 引擎. 二.概述 通过 JDK 8 的 Nashor ...

  4. VueJs路由跳转——vue-router的使用

    对于单页应用,官方提供了vue-router进行路由跳转的处理,本篇主要也是基于其官方文档写作而成. 安装 基于传统,我更喜欢采用npm包的形式进行安装. npm install vue-router ...

  5. python并发编程的几种方法

    1.多线程 Threading模块 2.2.6版本以后 多进程 multiprocessing模块 3.协程 gevent (是一个基于libev的并发库.它为各种并发和网络相关的任务提供了整洁的AP ...

  6. 总结的一些MySQL数据库面试题

    1.sql语句应该考虑哪些安全性? 1.防止sql注入,对特殊字符进行转义,过滤或者使用预编译的sql语句绑定变量. 2.最小权限原则,特别是不要用root账户,为不同的类型的动作或者组建使用不同的账 ...

  7. django的related_name

    转:https://segmentfault.com/q/1010000003705677 就是一个反向关联的属性,比方说model里面定义两个class,一个是A,一个是B class A(Mode ...

  8. vue 链接

    https://www.jianshu.com/p/5d9b341d650f vue-cli入门(三)——人员管理实例 ps:如何创建vue-cli项目 https://www.v2ex.com/t/ ...

  9. 记一次内存溢出的分析经历——使用thrift

    背景: 有一个项目做一个系统,分客户端和服务端,客户端用c++写的,用来收集信息然后传给服务端(客户端的数量还是比较多的,正常的有几千个), 服务端用Java写的(带管理页面),属于RPC模式,中间的 ...

  10. Hybrid APP混合开发

    写在前面: 由于业务需要,接触到一个Hybrid APP混合开发的项目.当时是第一次接触混合开发,有一些经验和总结,欢迎各位一起交流学习~ 1.混合开发概述 Hybrid App主要以JS+Nativ ...