☰
【C++】入门
2026/10/26 7:52:29 网站建设 项目流程

signed /unsigned 整型

  1. signed int(有符号 int)
    默认的 int 就是 signed int,signed 可以省略
    最高位是符号位:0 代表正数,1 代表负数

  2. unsigned int(无符号 int)
    没有符号位,全部比特用来存数值,只能存大于等于 0 的数
  3. 负数赋值给 unsigned
    按照补码直接 reinterpret(重新解读二进制)
    1 )计算机内部负数用补码存储
    2. )将负数赋值给 unsigned 变量:
    a ). 先得到这个负数的补码二进制
    b ) . 不看符号,把这一串二进制直接当做无符号数字解读
    3 ) 公式

    4) 例子
    // 无符号整形 unsigned int num = 10; cout << num << endl; num = -10; cout << num << endl;

常见坑

  1. 无符号数不要和负数比较
    unsigned int a = 5; //常见坑:无符号整数不能和负数比较 if (a > -1) { cout << "成立" << endl; }
    用公式计算unsigned的值

    -1转为 unsigned就是4294967295,5>4294967295为假。
  2. 循环里用 unsigned 容易死循环
    for(unsigned int i=10;i>=0;i--) { cout << i; }

    i 是无符号,i 减到 0 再减 1 不会变成‑1,变成很大正数,永远满足i>=0,死循环。

数据类型与 sizeof 运算符

sizeof 运算符

  1. sizeof 用来获取类型或者变量在内存中占用的字节数。
  2. 返回值类型:size_t,属于无符号整数类型。
  3. sizeof 是编译期运算符,不是函数,编译阶段就计算出结果,运行时不参与计算。

内置数据类型

  1. 整型

    无符号整型:unsigned char、unsigned short、unsigned int、unsigned long long,只能存储≥0 的数字。
  2. bool 布尔类型
    占用内存:1 字节,不是 1bit
    只有两个取值:true(逻辑真,等价 1),false(逻辑假,等价 0)
  3. 浮点型
//写法1 cout << "char : " << sizeof(char) << endl; cout << "bool : " << sizeof(bool) << endl; cout << "short : " << sizeof(short) << endl; cout << "int : " << sizeof(int) << endl; cout << "long : " << sizeof(long) << endl; cout << "long long : " << sizeof(long long) << endl; cout << "float : " << sizeof(float) << endl; cout << "double : " << sizeof(double) << endl; cout << "long double : " << sizeof(long double) << endl; //写法2 int a; cout << "sizeof(a) : " << sizeof(a) << endl;

typedef

  1. 作用
    typedef是类型重命名关键字,给已有的数据类型起一个简短的别名,并不会创造出新的数据类型
    别名和原类型完全等价
  2. 基础语法
    typedef 旧类型名 新类型名;
  3. //类型类型起别名 typedef unsigned int uint; typedef long long ll; typedef unsigned long long ull; int main() { //使用别名创建对象 uint a = 100; ll b = 12345651212; ull c = 9999999; cout << a << endl; cout << b << endl; cout << c << endl; //原生类型 unsigned int a2 = 100; cout &lt;&lt; a2 &lt;&lt; endl; return 0; }


  4. 知识点
    a)ASCII 编码
    每个英文字符都对应一个整数编号,这个编号就是ASCII 码
    例:'A'=65、'B'=66、'a'=97、'0'=48
    char类型变量底层存的就是这个数字
    b)cin 读取规则
    cin 根据变量的类型决定读取方式

    如果变量是int:键盘输入65→ 读取成数字 65
    如果变量是char:键盘输入65→ 读取成字符 A
    c)
    C++的cin是根据变量的类型在缓冲区读取数据

变量和常量

变量的创建

  1. 变量:值可以改变;常量:值不可改变

  2. 语法
    数据类型 变量名;
  3. 变量命名规则
    a)只能由字母、数字、下划线组成;开头必须是字母或下划线
    b)不能纯数字开头,不能有空格、-等特殊符号
    c)不能是 C++ 关键字,如int、char、if
    d)名字要有含义,见名知意
    e)区分大小写:num和Num是两个变量

变量初始化

  1. 定义变量的时候,直接给它赋一个初始值,就是初始化
  2. int age = 18; char ch = 'w'; double weight = 48.0; unsigned int height = 100;
  3. 变量的分类
    a)全局变量
    定义位置:所有大括号{}外面(main函数外面)
    作用域:整个程序都可以访问使用
    未初始化:默认值为 0
    int x; //全局变量 int main() { cout << x << endl; // 全局变量,未初始化,默认为0 return 0; }

    b)局部变量
    定义位置:大括号{}内部(例如main函数里面)
    作用域:仅限当前大括号内可用
    未初始化:没有默认值,数值随机,使用前必须赋值,否则运行出错
    int main() { int x; //局部变量 cout << x << endl; // 局部变量,未初始化,是随机值,编译报错 return 0; }


    c)同名冲突规则
    局部变量优先
    当局部变量和全局变量名字一样时,在局部范围内优先使用局部变量的值
  4. int n = 1000; //全局变量 int main() { int n = 10; // 局部变量 cout << n << endl; // 10 return 0; }

常量

  1. 常量:程序运行期间,值永远不能被修改,一共有 3 种:字面常量、#define 宏常量、const 常量

  2. 字面常量
    a)整型常量
    十进制:100、-5、17
    八进制:数字0 开头,012、016
    十六进制:0x 开头,0x123、0xFF
    b)字符常量:单引号包裹 'a'
    c)浮点常量:3.14,科学计数法 1E6(= 1000000)
  3. #define 宏常量 (预处理常量)
    a)语法
    #define 常量名 内容
    b)
    #define M 100 #define CH 'x' #define PI 3.1415926 int main() { cout << M << endl; cout << CH << endl; cout << PI << endl; return 0; }

    c)底层原理:预处理阶段纯文本替换
    #define M 100 #define CH 'x' #define PI 3.1415926 int main() { //预处理:底层原理纯文本替换 cout << M << endl; -> 等价于 cout << 100 << endl; cout << CH << endl; -> 等价于 cout << x << endl; cout << PI << endl; -> 等价于 cout << 3.1415926<< endl; return 0; }
  4. const 定义常量
    a)语法
    const 数据类型 常量名 = 值;
    b)例子:计算圆周长
    //计算圆周长 const double PI = 3.1415926; int main() { int r = 0; cin >> r; cout << "周长:" << 2 * PI * r << endl; cout << "面积:" << PI * r * r << endl; /*PI = 3.14;*/ //报错,常量修饰后不能修改 return 0; }

    c)const 常量三大好处
    可读性高:PI比直接写3.14159易懂
    可维护性强:只需要在定义处改 1 次值,所有用到它的地方全部自动更新(一改全改)
    自带类型,编译时做类型检查,比#define严谨
    d)#define VS const 对比

    e)禁止修改
    const int num = 10; num = 20; //报错!常量不能赋值修改

例题

  1. 鸡兔同笼
    https://www.luogu.com.cn/problem/B2614


  2. 方法1 先求兔子,再求鸡
    //int main() //{ // //鸡兔同笼 // int head = 35; // int foot = 94; // // 思路:假设全部是鸡,用总的脚数减鸡的总脚数,多出来的是兔子的脚 // // 在除2 就是兔子的个数 // int rabbit = (foot - head * 2) / 2; // int chicken = head - rabbit; // cout << "兔子个数:" << rabbit << endl; // cout << "鸡的个数:" << chicken << endl; // return 0; //}
  3. 方法2:先求鸡,再求兔子
    int main() { int j = 0; // 鸡的个数 int t = 0; //兔的个数 int h = 35; //总头数 int f = 94; //总脚数 //思路:假设都是兔子,用兔子的总脚数 减总脚数 // 多出来的是鸡的脚数 //再除2 得到的是 鸡的个数 //最后用 总头数减鸡的个数 得到是 兔的个数 j = (4 * h - f) / 2; t = h - j; cout << "鸡的个数为:" << j << endl; cout << "兔的个数为:" << t << endl; return 0; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询