王清欢Randy 王清欢Randy
首页
  • 编程语言

    • C/C++ 学习笔记
    • Golang 学习笔记
  • 算法分析

    • LeetCode 刷题笔记
  • 操作系统

    • Linux 基础
    • Vim 实用技巧
    • Shell 脚本编程
    • GDB 学习笔记
  • 开发工具

    • Git 学习笔记
  • 分布式理论

    • 共识算法
    • 分布式事务
  • 数据库内核

    • PostgreSQL
    • Postgres-XL
  • hidb
  • pgproxy
  • 实用技巧
  • 学习方法
  • 资源分享
GitHub (opens new window)
首页
  • 编程语言

    • C/C++ 学习笔记
    • Golang 学习笔记
  • 算法分析

    • LeetCode 刷题笔记
  • 操作系统

    • Linux 基础
    • Vim 实用技巧
    • Shell 脚本编程
    • GDB 学习笔记
  • 开发工具

    • Git 学习笔记
  • 分布式理论

    • 共识算法
    • 分布式事务
  • 数据库内核

    • PostgreSQL
    • Postgres-XL
  • hidb
  • pgproxy
  • 实用技巧
  • 学习方法
  • 资源分享
GitHub (opens new window)
  • C语言基础

    • 数据类型
      • 整数类型
      • 浮点类型
      • 逻辑类型
      • 类型转换
    • 指针与字符串
    • 结构类型
    • 链表
    • 程序结构
    • 文件
  • C++面向对象编程

    • C++面向对象

      • 从 C 到 C++
      • C++ 类和对象基础
      • C++ 构造函数与析构函数
      • C++ 类和对象提高
      • 运算符重载
      • C++ 继承
      • C++ 多态
    • C++ STL

      • C++ 输入输出流
      • C++ 泛型编程
      • C++ string类
      • C++ 标准模板库 STL 概述
      • C++ 标准模板库 STL 顺序容器
      • C++ 标准模板库 STL 函数对象
      • C++ 标准模板库 STL 关联容器
      • C++ 标准模板库 STL 容器适配器
    • C++ 新特性

      • C++11 新特性
  • C&Cpp学习笔记
  • C语言基础
王清欢
2023-11-18
目录

数据类型

# 数据类型

​ C语言是有数据类型的语言,C之后分为C++/Java为代表的更加强调类型的语言与Python/JS这种弱化类型的语言,强调类型的语言更加适合底层开发。

C语言中类型的作用:1.占据空间大小 2.输出格式 3.sizeof是静态运算符

#include <stdio.h>
int main()
{
    int a;
    printf("sizeof(a++)=%ld\n",sizeof(a++));
    printf("a=%d\n",a);
    printf("sizeof(a+1.0)=%ld\n",sizeof(a+1.0));
    printf("a=%d\n",a);
    return 0;
    /*
    sizeof(a++)=4
    a=6
    sizeof(a+1.0)=8
    a=6
    */
}

# 整数类型

  • 一个int类型表示的CPU中寄存器的宽度

  • 补码运算的使用就是为了避免在有符号数运算的过程中对符号的特殊考虑,例如为了得到1+(-1)=0可以利用溢出00000001+11111111=00000000,可以看出补码的意义在于用补码和原码相加得出一个溢出的零。

  • 补码的表示范围,8位补码可以表示256个数,即-128~-1和0~127

1568886365666
  • 八进制,十六进制输入输出
int main()
{
    int a = 012; //数字前加0表示八进制
    int b = 0x12; //数字前加0x表示十六进制
    printf("a=%d, b=%d\n",a,b);
    printf("a=0%o,b=0x%x\n",a,b);
    return 0;
    /*
    a=10,b=18
    a=012,b=0x12
    */
}
  • 编程中没有特别需要用int(内存对齐问题,可能会耗损CPU处理时间);unsigned只会用在底层硬件操作中,在编程时不用特别区分。

# 浮点类型

  • 浮点类型输出,%e科学计数法;%.10f输出十位小数;浮点数输出是四舍五入的,因为二进制数只能离散地表达十进制数。
  • 超过范围的浮点数,无穷大inf,不存在nan
  • 浮点数比较相等可能失败,用fabs(f1-f2)<le-12,浮点数在计算机中是不准确的,一般计算用BCD数或者整数,不用浮点数。
int main()
{
    float a,b,c;
    a = 1.345f;
    b = 1.123f;
    c = a + b;
    if(c == 2.468)
    {
        printf("不相等\n");
    }else{
        printf("不相等!=c%.10f,或%f\n",c,c);
    }
}
  • 没有特殊需要,只使用double,与int理由相似,使用double进行运算,CPU内容也只需要一次内存存取就可以完成。

# 逻辑类型

  • bool类型不是原生类型,使用时导入头文件#include <stdbool.h>
  • 逻辑运算,与或非,! > && > ||
  • 短路现象:逻辑运算自左向右,左边运算完成就可以得到结果,不进行右边。不要把赋值语句写进逻辑判断表达式

# 类型转换

  • **自动类型转换:**当运算符的两边类型不一样时,会向字长长的的转换。
  • 强制类型转换:(类型+值,类型转换要注意表示范围越界,强制类型转换得到的是新变量。
  • 逗号运算:只用在for循环中,使用逗号右侧值。
上次更新: 2023/11/19, 12:55:48
指针与字符串

指针与字符串→

Theme by Vdoing | Copyright © 2023-2024 Wang Qinghuan | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式