Day 8 - 变数又来了? 变数怎麽叫 a

变数怎麽叫

今天起两天,会介绍一下在C++里面,每一个变数的叫法规则,他们在电脑里面是怎麽样储存的。

经过了两天的训练,应该二进位不陌生吧!这些变数就是用二进位等等的方式储存的,但每个变数又不太一样啦,下面就来一一介绍。


资料型态

在介绍变数的型态之前,我们可以先了解一下在C++中的基本资料型态(Basic data types)。

首先

第一种是: literal 它是一种被写死的质 (例如之後会稍微讲一下的 constant (常数) )

第二种是: variable 就是一个可以变动的质 (像是下面会提到的变数)


变数有哪些?

之前有稍微提到过,变数到底有那些东西,那我们一样搬来那个表格:

【C++中有那些变数呢?- 整数部分】

Name bytes
bool 1
char 1
int 4
short 2
long 4
unsigned int 4
unsigned short 2
unsigned long 4

我在第四天的时候有说过,宣告变数,就像是要跟一间餐厅订位一样,你需要先跟餐厅说你要预订多少位置,餐厅才可以预留多少位置给你。

宣告这些变数的时候,就是在宣告这些位置,而後面那个bytes 就指的是你宣告的变数需要多少个位置。

一个 byte 会等於 八个bit

所以,拿 int 来举例,他占有 4 个bytes,也就是说他的bit会来到 32 bit 这麽多!

那一个bit 又是甚麽呢?

还记得上次我们谈到的2进位吗,它的其中一个数字就是一个 bit 啦!

例如: 0010 0010 其中每一个0还有1就是一个 bit!

那我们来详细一点的介绍一下这些整数的变数吧!


int

为integer, 整数的缩写

占据 4 个 bytes = 32 bits

因为占据了共 32 个 bits,所以它可以储存的资料大小可以从 (-2^31) ~ (+2^31) - 1

可以想像成像上图一样的图形。

在这边就可以顺便介绍其他的整数:

  1. unsigned int :

    它也占据了 4 个 bytes,但是它储存的资料只有从0 ~ (2^32) - 1(也就是只有正数)

  2. short :

    它占据了 2 个 bytes,所以它储存的资料只有 int 的一半(-2^15 ~ + 2^15 - 1) (总共只有 16 bits)

  3. long :

    它跟 int 占据了一模一样的空间,(在32位元的编译器中),因此可以储存的范围跟 int 一样


sizeof()

在你很怀疑一个变数是多大的时候,你可以使用这个函式来确认它真正的大小。

要怎麽用?

#include<iostream>
using namespace std;

int main(){
	cout << "int" << sizeof(int) << endl;
	cout << "unsigned int" << sizeof(unsigned int) << endl;
	cout << "short" << sizeof(short) << endl;
	cout << "long" << sizeof(long) << endl;
	
	return 0;
}

就会得到:

所以如果有疑惑就去做看看吧!


climits

这边这个函式库,则可以查到一个变数的上下界

例如:

#include<iostream>
#include<climits>
using namespace std;

int main(){
	cout << INT_MIN << ", " << INT_MAX << endl;
	cout << endl;
	cout << SHRT_MIN << ", " << SHRT_MAX << endl; //SHRT 是 short的简称
	cout << endl;
	cout << LONG_MIN << ", " << LONG_MAX << endl;
	
	return 0;
}

可以得到 :


Overflow 溢位

这个词好像常被人提起,但是好像又不太知道甚麽意思吧!

我们直接丢个例子:

#include<iostream>
using namespace std;

int main(){
	short numberA = 32765; // 32765 = 2^15 - 3;
	int i = 0;
	while (i < 10)
	{
		short numberB = numberA + i;
		cout << numberA + i << " " << numberB << endl;
		i++;  
	}
}

这时候,你会发现怎麽两边的数字怪怪的,明明numberA 跟 numberB 好像是长的一模一样的东西,但是印出来的东西又是另外一个回事。

我们可以先关注是从哪里开始改变的:

numberB 从 32767 + 1 後,变成了- 32768

疑,阿怎麽越加越小咧?

其实是因为这样:

在整数中,最前面那个bit 是专门在处理正负号的,而short又只有 16 个 bits,所以当每个bit都塞满的时候,再加 1 就会满出来,变成负号了!


小结

进位还有电脑里面运作真的有点复杂,但都是必须要搞懂的小东西。

ps 妈妈真的不懂梗图 & memes 在干嘛。


参考

1.https://read01.com/zh-tw/JDNzj6.html

2.(limits.h)


<<:  [Day 5] 就决定是你了!艺文资讯整合平台

>>:  请适时的停下脚步,给自己多点思考空间

MySQL 一对多基本操作

实体 所谓实体即为描述我们真实世界的物件,如员工、客户、订单皆属於实体。 在实务上的需求我们可以将实...

Day1 所以,网路到底是什麽?

在这个人手一机的时代,没接触过网路的人应该不多吧,不管是购物、查资料、追剧都会用到网路,但这个每天都...

D3JsDay14不想图表被冰冻,那就做一点互动—事件互动

什麽是互动?简单说希望能够让使用者允许监听和分派事件,用比较白话的一点方式举例就是当我们滑鼠按下某个...

Progressive Web App 推播通知: 网站推播通知原理开箱解密 (22)

什麽是网站推播通知 推播通知不管对 App 或是网站来说都是一种重新吸引用户来使用 App 的方法,...

Day7 用python写UI-聊聊标签Label方法(二)

今天要主要会介绍几个 widget 的共通方法,後面的部分会介绍如何在介面上加上图片还有其他几个实用...