终于考完研了!!!
考虑到后期工作可能会主要使用C++语言,之间上的课只是简单的学习过C++,懂基本原理和一些简单的面向对象的编程,但是没有过系统的学习,所谓基础不牢地动山摇,所以现在从头开始学习一下C++,参考书是《C++ Primer》(第五版),做这个专栏就是记录一些学习时的笔记,我学习编程的目的是运用而非研究,所以很多地方的底层细节不做过多的了解。
今天的笔记是:基本内置类型、变量。
1、算术类型包括整型(包括了字符和bool类型在内)、浮点型。
2、整型可分为:带符号型(signed)和不带符号型(unsigned)。其中带符号类型的可以表示正数、0、负数,而无符号类型只能表示0和正数,各常用类型的的数的表示范围如下:
short:-32768 ~ 32768 (-2^15 --> 2^15-1)
unsigned short: 0 ~ 65535 (0 --> 2^16-1)
int : -2147483648 ~ 2147483647 (-2^31 --> 2^31-1)
unsigned int: 0 ~ 4294967295 (0 --> 2^32-1)
long: -2147483648: ~ 2147483647 (-2^31 --> 2^31-1)
unsigned long: 0 ~ 4294967295 (0 --> 2^32-1)
long long: -9223372036854775808 ~ 9223372036854775807 (-2^63 --> 2^63-1)
unsigned long long: 0 ~ 18446744073709551615 (0 --> 2^64-1)
若给不带符号类型的赋值小于零的数,若直接打印此数,输出的是该无符号数的模加上该数,若其运算结果为正数或为零,则正常输出。如下:
//例1
#include<iostream>
int main()
{
unsigned int d;
d = -2;
std::cout << d << std::endl;
std::cout << d + 2 << std::endl;
std::cout << d - 2 << std::endl;
std::cout << d + 7 << std::endl;
system("pause");
return 0;
}
输出结果以此为:4294967294,0,4294967292,5。
//例2
#include<iostream>
int main()
{
unsigned u = 10, u2 = 42;
std::cout << u2 - u << std::endl;
std::cout << u - u2 << std::endl;
int i = 10, i2 = 42;
std::cout << i2 - i << std::endl;
std::cout << i - i2 << std::endl;
std::cout << i - u << std::endl;
std::cout << u - i << std::endl;
system("pause");
return 0;
}
输出:32,4294967264,32,-32,0,0
3. 变量初始化:变量在被定义的时候被赋予其初始值。
4. 变量赋值:把对象当前的值擦去,用一个新值代替。
一种常见的错误赋值语句:
错误赋值: double a = b = 2.3;
正确赋值:double a,b; a = b = 2.3;
5. 变量的声明与定义:
变量的声明:extern int i; 仅仅只是声明i,并没有定义i,
变量的定义:int i;声明并定义了变量i。
作用:再多个文件用到了同一个变量的时候,必须将变量的定义和声明分离,只能在一个文件里面定义,其余文件用到是则是声明,不能够重新定义。
6. 变量的标识符:变量的标识符由字母、数字和下划线组成,开头不能是数字,不能与C++的保留字和关键字相同。
7. 名字的作用域:名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端(即所在的花括号)结束。 嵌套作用域:作用域中一旦声明了某个名字,它所嵌套的所有作用域都可以访问该名字(即在大作用域中的定义的名字,可以在其所包含的小作用域进行访问),允许在内存作用域中定义与外层作用域中相同的名字,这样在内层作用域中该名字就会被覆盖。
//分析变量i和sum:
int i=100,sum=0;
for(int i=0; i != 0 ; ++i)
sum += i;
std::cout<<i<<" " <<sum<<std::endl;
//输出结果为: 100 45,
首先定义了全局变量i和sum,然后在for循环中又定义了一个i,全局变量在for循环中仍然可以被访问,但是此时的i被覆盖了,即在这个for循环的这个作用域里面,i代表的是局部变量i而不是全局变量i,sum没有被覆盖,故此处的sum就是全局变量sum。最后输出时,for循环结束,所以最后输出的i是全局变量i全局变量sum。