C++入门知识总结(1)
1.有符号数和无符号数。
这个问题其实是一个很细的问题,我们还要把问题追溯到“位”,针对不同的“位”,那么能表示的最大数的范围不同。因为计算机存储数据都是以二进制的方式去存储的,即0和1,比如 110=2^1+2^2=5,其中的计算步骤是:
1.000->001=1
2.001->010=2
3.010->100=3
4.100->101=4
5.101->110=5
我们可以看到一点,无论如何,如果要相对高位的数字改变的话,那么都要从最低位进位。当然有一种简单的解法,就是用2^(n-1)去计算每一位对应的数字,因为第0位是有效的(即最右边的),所以要减去1。
下面我们步入正题,如果这个数是 unsigned __int16位的,那么在计算机中表示就是: 1111 1111 1111 1111 或者是 1 0000 0000 0000 0000-1,
由于无符号数的最高位都是可用的数字,而且没有负数,所以最终的答案为 0~(65536-1)=>256^2-1

那么如果是有符号数呢?那么最高位就为符号位 0111 1111 1111 1111 或者是 1000 0000 0000 0000-1,所以答案就是256^2/2-1=65536/2-1=32767,又由于有负数存在,所以最终答案就是-32767~32767.
我们来写一段代码来验证一下上面的理论是否正确。
#include <iostream>
using namespace std; int main()
{ unsigned __int16 a1 = 65535; //无符号数的最大值
unsigned __int16 a2 = 65535+65534; //无符号数的最大值乘以2
cout << "a1="<<a1<<",a2="<<a2<< endl; __int16 a3 = 32767; //
__int16 a4 = 32767 + 32766;
__int16 a5 = -32767;
__int16 a6 = -32767 + (-32766); cout << "a3=" << a3 << ",a4=" << a4 << ",a5=" << a5 << ",a6=" << a6 << endl; system("pause");
}
下面是运行结果:

其中 a4=-3 ,a6=3,大家可能会疑惑,为什么会是这个值呢,我是这么理解的:如果值超出了最大的范围,如果是在边界+1的这个数字的话,那么求的就是最大值的反码+1,然后再加上或者减去相应的值。比如这么说,a4=32767+1,那么值就为-32768,32767+2就为-32767,依次类推。。。。其他的类型也是一个道理,因为只是能表示的范围不一样而已,上面说的是16位的。
2.指针
网上有关于怎么解释指针,相信很多人已经看了很多大牛们通俗易懂的解释了,我这里也来给自己的学习做一个总结吧。
我个人觉得理解指针最好的方式就是结构体,虽然这样看起来有点不太妥当,因为听说只有汇编才可以修改内存地址,不知道C语言怎么修改内存地址。
struct PointerStru
{
int data; //数据域
__int64 dataAddress; //地址域
PointerStru *pNext; //直接后继
}str1,str2;
我们可以把上面的结构体理解为一个“变量”,虽然它确实也不是变量,里面有数据域和地址域,地址里面存放的就是这个PointerStru内存块所在的“代号”。用一种比较通俗的讲法就是,图书馆里的一本书,书就是上面的data,而书所处的位置比如301号房间,就是dataAddress。
下面我从网上找了几个例子,自己也懒得写了,反正都是大同小异,来热热身。
#include <iostream>
using namespace std;
int main( )
{
int *p1,*p2,*p,a,b;
cin>>a>>b; //输入两个整数
p1=&a; //使p1指向a
p2=&b; //使p2指向b
if(a<b) //如果a<b就使p1与p2的值交换
{
p=p1;p1=p2;p2=p; //将p1的指向与p2的指向交换
}
cout<<"a="<<a<<" b="<<b<<endl;
cout<<"max="<<*p1<<" min="<<*p2<<endl;
return 0;
}
上面的例子就是的关键在于交换指针的地址,因为指针p1指向了a,p2指向了b,如果交换地址,就是p1指向b,p2指向a,说得更简单一点就是和p1=&b;p2=&a;的作用一样了。
如果还不太懂,下面一张图可以给你解释,即交换了指向的地址。

C++入门知识总结(1)的更多相关文章
- [置顶] Mysql存储过程入门知识
Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...
- 移动H5开发入门知识,CSS的单位汇总与用法
说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...
- H5移动端开发入门知识以及CSS的单位汇总与用法
说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...
- Java web 入门知识 及HTTP协议详解
Java web 入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...
- Java基础入门知识
Java编程入门知识 知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...
- zabbix入门知识
zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...
- React的入门知识与概念【1】
回顾在以往的项目开发中,从最初的使用的原生html+js+css+jquery开发,到后来随着项目功能的增加,也渐渐学习了Vue.js框架的开发,以及Vue.js的全家桶Axios,Vue-route ...
- 我的Python笔记补充:入门知识拾遗
声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...
- 浅谈TCP IP协议栈(一)入门知识【转】
说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...
- 2. Mysql数据库的入门知识
2. Mysql数据库的入门知识 (1)打开Windows系统提供的服务查看相应的服务. (2)在Windows任务管理器的进程中查看 (3)使用命令行管理windows的Mysql数据库服务. Ne ...
随机推荐
- 利用DOS批处理实现定时关机操作
10月1放假回来,寝室晚上10:30就停电了,最无法让人理解的是第二天早上8:00才来电.原来晚上电脑都是不关机的,开着WiFi一直到天亮,可是现在不行了,电脑如果一直开着第二天早上起来电脑肯定没电, ...
- SQL Server 2012安装图文教程
解析SQL Server 2012安装中心 当系统打开"SQL Server安装中心",则说明我们可以开始正常的安装SQL Server 2012了. SQL Server安装中心 ...
- Web服务器控件之button
button有两种类型的按钮,一种是提交按钮,一种是命令按钮.只说命令按钮. 命令按钮事要使用两个属性,分别是CommandName和CommandArguement属性,当该按钮被点击时,将页面中的 ...
- 控制TextField的内容长度
参考如下代码(下例是控制设置交易密码,控制6位): - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [ ...
- 【Java并发编程实战】-----synchronized
在我们的实际应用当中可能经常会遇到这样一个场景:多个线程读或者.写相同的数据,访问相同的文件等等.对于这种情况如果我们不加以控制,是非常容易导致错误的.在java中,为了解决这个问题,引入临界区概念. ...
- twobin博客样式—“蓝白之风”
自暑假以来,囫囵吞枣一般蒙头栽入前端自学中,且不说是否窥探其道,却不自觉中提高了对网页版面设计的要求,乃至挑剔.一个设计清爽美观的网页能让读者心旷神怡,甚至没有了阅读疲劳:而一个设计粗劣嘈杂的网页实在 ...
- Linux 自动同步服务器时间
200 ? "200px" : this.width)!important;} --> 介绍 Linux服务器运行久时,系统时间就会存在一定的误差,本篇文章就来介绍怎样使服务 ...
- ASP.NET MVC 路由(一)
ASP.NET MVC路由(一) 前言 从这一章开始,我们即将进入MVC的世界,在学习MVC的过程中在网上搜索了一下,资料还是蛮多的,只不过对于我这样的初学者来看还是有点难度,自己就想看到有一篇引导性 ...
- Android开发学习之路-Android Studio开发小技巧
上一次发过了一个介绍Studio的,这里再发一个补充下. 我们都知道,Android Studio的功能是非常强大的,也是很智能的.如果有人告诉你学Android开发要用命令行,你可以告诉他Andro ...
- struts2+spring+hibernate 实现分页
在这里要感谢下这位博友发表的博文 http://www.blogjava.net/rongxh7/archive/2008/11/29/243456.html 通过对他代码的阅读,从而自己实现了网页分 ...