【笔记】C++系列01:从hello开始说变量、数据类型、常量与运算法
1.1 程序
/*
程序范例:第一个c++程序
版权拥有人:
*/
#include <iostream> // 载入外部文件,这里写法和早起C++不同,不用跟.h
class Printer //定义类
{
private:
int Serial_Number; //定义类的属性,这里默认被赋值为0;每行代码后加分号,这个和python不同
public:
void Hello() //定义类的方法
{
std::cout << "Hello C++\n"; // 打印内容并换行,读作C-out,和python的print()以及java的System.out.println()类似
std::fflush(stdout); // using namespace std时,可以直接用cout和fflush,但这样等于引入整个命名空间,导致空间污染和很不多必要问题
std::cout << "Hello C++"<< std::endl; // std::endl等于换行+刷新缓存
}
}; //完成类的定义,需要分号
int main() // 程序进入点,早期c++是不用返回值用void的,现在都要求返回整型
{
Printer printer; // 申明对象,不用像java一样new
printer.Hello(); // 调用方法
return 0;
} // 完成方法的定义,无须分号
1.2 数据类型
#include <iostream>
#include <limits>
#include <string>
int main() {
// 基本数据类占用存储空间的大小
std::cout << "Size of char: " << sizeof(char) << " byte(s)" << std::endl;
std::cout << "Size of short: " << sizeof(short) << " byte(s)" << std::endl;
std::cout << "Size of int: " << sizeof(int) << " byte(s)" << std::endl;
std::cout << "Size of long: " << sizeof(long) << " byte(s)" << std::endl;
std::cout << "Size of long long: " << sizeof(long long) << " byte(s)" << std::endl;
std::cout << "Size of float: " << sizeof(float) << " byte(s)" << std::endl;
std::cout << "Size of double: " << sizeof(double) << " byte(s)" << std::endl;
std::cout << "Size of long double: " << sizeof(long double) << " byte(s)" << std::endl;
std::cout << "Size of bool: " << sizeof(bool) << " byte(s)" << std::endl;
// 查看数据类型的最大值和最小值-部分类型
std::cout << "Minimum value of char: " << std::numeric_limits<char>::min() << std::endl;
std::cout << "Maximum value of char: " << std::numeric_limits<char>::max() << std::endl;
std::cout << "Minimum value of short: " << std::numeric_limits<short>::min() << std::endl;
std::cout << "Maximum value of short: " << std::numeric_limits<short>::max() << std::endl;
std::cout << "Minimum value of unsigned short: " << std::numeric_limits<unsigned short>::min() << std::endl;
std::cout << "Maximum value of unsigned short: " << std::numeric_limits<unsigned short>::max() << std::endl;
std::cout << "Minimum value of bool: " << std::numeric_limits<bool>::min() << std::endl;
std::cout << "Maximum value of bool: " << std::numeric_limits<bool>::max() << std::endl;
// c++使用string类型,要引入#include <string>,并使用std::string方式
std::cout << "Minimum value of string: " << std::numeric_limits<std::string>::min() << std::endl;
std::cout << "Maximum value of string: " << std::numeric_limits<std::string>::max() << std::endl;
return 0;
}
1.3 变量
命名字首建议
short --> sh
int --> i
long --> l
float --> f
double --> d
long double --> ld
char --> c
string --> s
bool --> b
unsigned int --> ui
1.4 常量
在C++中,使用#define
定义常量和const
定义常量的区别主要在于它们的类型检查和作用域。
- 类型检查:
#define
定义的常量没有类型,编译器不会对常量进行类型检查。而const
定义的常量有类型,编译器会对常量进行类型检查。 - 作用域:
#define
定义的常量在整个程序中都有效,而const
定义的常量只在声明它的文件中有效。如果需要在多个文件中共享常量,建议使用const
定义。
下面用代码演示这两种定义常量的方式:
#include <iostream>
// 使用#define定义常量
#define PI 3.14159
// 使用const定义常量
const int MAX_VALUE = 100;
int main() {
std::cout << "PI: " << PI << std::endl;
std::cout << "MAX_VALUE: " << MAX_VALUE << std::endl;
return 0;
}
1.5 运算符
#include <iostream>
std::string printBinary(int num)
{
std::string binary = "";
if (num == 0)
{
return "0";
}
else if (num > 0)
{
while (num > 0)
{
int remainder = num % 2;
binary = std::to_string(remainder) + binary;
num /= 2;
}
}
else
{
num = -num; // 将负数转换为正数
while (num > 0)
{
int remainder = num % 2;
binary = std::to_string(remainder) + binary;
num /= 2;
}
binary = "-" + binary; // 在二进制串前加上负号
}
return binary;
}
int main()
{
std::cout << "算术运算符示例" << std::endl;
std::cout << "7+2=" << 7 + 2 << std::endl;
std::cout << "7-2=" << 7 - 2 << std::endl;
std::cout << "7*2=" << 7 * 2 << std::endl;
std::cout << "7/2=" << 7 / 2 << std::endl;
std::cout << "7.0/2=" << 7.0 / 2 << std::endl;
std::cout << "7%2=" << 7 % 2 << std::endl;
std::cout << "\n算术指定运算符示例" << std::endl;
int A = 7;
A += 2;
std::cout << "A+=2 --> A=" << A << std::endl;
A -= 2;
std::cout << "A-=2 --> A=" << A << std::endl;
A *= 2;
std::cout << "A*=2 --> A=" << A << std::endl;
A /= 2;
std::cout << "A/=2 --> A=" << A << std::endl;
A %= 2;
std::cout << "A%=2 --> A=" << A << std::endl;
std::cout << "\n比较运算符示例" << std::endl;
std::cout << "7==2 result:" << (7 == 2) << std::endl;
std::cout << "7>2 result:" << (7 > 2) << std::endl;
std::cout << "7<2 result:" << (7 < 2) << std::endl;
std::cout << "7>=2 result:" << (7 >= 2) << std::endl;
std::cout << "7<=2 result:" << (7 <= 2) << std::endl;
std::cout << "7!=2 result:" << (7 != 2) << std::endl;
std::cout << "\n逻辑运算符示例" << std::endl;
bool m = true;
bool n = false;
std::cout << "m&&n result:" << (m && n) << std::endl;
std::cout << "m||n result:" << (m || n) << std::endl;
std::cout << "!m result: " << (!m) << std::endl;
std::cout << "\n其它运算符示例" << std::endl;
int x = 1;
std::cout << "x++:" << x++ << std::endl; // 先传出值,再加1
std::cout << " x:" << x << std::endl;
x = 1;
std::cout << "++x:" << ++x << std::endl; // 先加1,再传出值
std::cout << " x:" << x << std::endl;
int y = 3;
std::cout << "y--:" << y-- << std::endl;
std::cout << " y:" << y << std::endl;
y = 3;
std::cout << "--y:" << --y << std::endl;
std::cout << " y:" << y << std::endl;
std::cout << "\n位运算示例" << std::endl; //指对二进制数进行操作的运算,包括与、或、异或、取反、左移和右移等操作
int a = 5; // 二进制表示为 0101
int b = 3; // 二进制表示为 0011
std::cout << "a & b:" << (a & b) << " Binary:" << printBinary((a & b)) << std::endl; // 结果为 0001,即十进制的 1
std::cout << "a | b:" << (a | b) << " Binary:" << printBinary((a | b)) << std::endl; // 结果为 0111,即十进制的 7
//按位异或(^):结果为1的位表示两个操作数对应位一个为0一个为1。
std::cout << "a ^ b:" << (a ^ b) << " Binary:" << printBinary((a ^ b)) << std::endl; // 结果为 0110,即十进制的 6
//取反(~):对一个数的所有位取反,即将0变为1,将1变为0。注意,取反的结果是一个负数。
std::cout << "~a: " << (~a) << " Binary:" << printBinary((~a)) << std::endl; // 结果为 -6,即二进制的补码表示为 -0101
//左移(<<):将一个数的所有位向左移动指定的位数,右边用0填充。例如,将a向左移动2位,相当于将a乘以2的2次方。
std::cout << "a<<2: " << (a << 2) << " Binary:" << printBinary((a << 2)) << std::endl; // 结果为 20,即二进制的 010100
//右移(>>):将一个数的所有位向右移动指定的位数,左边用符号位填充。例如,将a向右移动2位,相当于将a除以2的2次方。如果a是负数,那么左边用1填充;如果a是正数,那么左边用0填充。
std::cout << "a>>2: " << (a >> 2) << " Binary:" << printBinary((a >> 2)) << std::endl; // 结果为 1,即二进制的补码表示为 001
std::cout << "-5>>2:" << (-5 >> 2) << " Binary:" << printBinary((-5 >> 2)) << std::endl; // 结果为 -2,即二进制的补码表示为 -101
return 1;
}
输出结果
算术运算符示例
7+2=9
7-2=5
7*2=14
7/2=3
7.0/2=3.5
7%2=1
算术指定运算符示例
A+=2 --> A=9
A-=2 --> A=7
A*=2 --> A=14
A/=2 --> A=7
A%=2 --> A=1
比较运算符示例
7==2 result:0
7>2 result:1
7<2 result:0
7>=2 result:1
7<=2 result:0
7!=2 result:1
逻辑运算符示例
m&&n result:0
m||n result:1
!m result: 0
其它运算符示例
x++:1
x:2
++x:2
x:2
y--:3
y:2
--y:2
y:2
位运算示例
a & b:1 Binary:1
a | b:7 Binary:111
a ^ b:6 Binary:110
~a: -6 Binary:-110
a<<2: 20 Binary:10100
a>>2: 1 Binary:1
-5>>2:-2 Binary:-10
附记:在茫茫的信息海洋中,遇到就是有缘,期待回复交流,为缘分留下痕迹……