2-C语言中的数据类型

一.字节

字节是计算机中用于衡量和操作数据的基本单位

详细解释:

1.物理层面

计算机底层只能处理0和1(二进制),每个0或1被称为一个比特

最初,计算机设计者需要规定一次处理多少比特。一个字节就是一组固定数量的比特的集合。虽然历史上字节的大小有过变化,但自20世纪70年代以来,1个字节=8个比特已经成为绝对的标准

2.容量角度

字节是基本单位,可以用它来衡量数据量的大小

  • 1字节可以存储1个英文字母
  • 更大的单位如下:1KB = 1024字节;1MB = 1024KB;1GB = 1024MB;1TB = 1024GB
  • 我们的文件大小、硬盘容量、内存大小,都是用字节及其衍生单位来衡量的

3.编码的角度

计算机如何用字节表示文字?通过编码

  • ASCII编码:最早也是最著名的编码之一。它规定用1个字节(8位)来表示英文字符、数字和符号。 例如:字节01000001代表A,00110001代表数字1
  • Unicode编码:为了容纳全球所有语言的字符,出现了Unicode。最常用的UTF-8是Unicode的一种实现方式,它用1到4个不等的字节来表示一个字符; 如,英文字符A仍然用1个字节表示:01000001 中文字符"中"则需要用3个字节表示:11100100 10111000 10101101

字节的重要性:

1.它是寻址的基础:计算机内存中的每一个字节都有一个唯一的"门牌号"(称为内存地址),CPU通过这个地址来准确地找到需要的数据

2.它是数据的原子:几乎所有的高级数据类型(如整数、浮点数、字符串)在内存中都是由一个或多个连续的字节组成的

2.它是标准化的结果:8位字节的确立,使得不同厂商的hardware和software之间能够互通有无,是现代计算机产业发展的基石

简单来说,字节就是计算机世界里那个不可或缺的"基本粒子",是连接底层硬件(0和1)与上层应用(文字、图片、程序)的桥梁

二.C语言中的数据类型

1.整数类型

C语言通过不同的类型修饰符组合,提供了多种整数类型,其主要区别在于:取值范围和占用内存大小

通用语法: [修饰符] int [变量名]

其中int有时可以直接省略

1.基本整型 int

大小通常为4字节

取值范围为-2^31 ~ 2^31 - 1

示例 int count = 100;

2.短整型short(short int)和长整型long(long int)long long (long long int)

  • short:大小通常为2字节 取值范围为-2^15 ~ 2 ^15 - 1 示例:short temperature = -10;
  • long:在32位系统上通常为4字节,在Linux/Unix系统上通常为8字节(在64Windows上仍为4字节) 取值范围:4字节时同int;8字节时为-2^63 ~ 2^63 - 1 字面量后缀:建议使用L,如1000000L 示例:long big_number = 1234567890L;
  • long long:大小通常为8字节(C99标准引入) 取值范围:与8字节的long相同 字面量后缀:使用LL 示例:long long huge_number = 9223372036854115807LL;

3.无符号整型(使用unsigned修饰)

只能表示零和正数,因此正数范围比对应的有符号类型大一倍

  • unsigned int:大小:通常为4字节 取值范围:0 ~ 2^32 - 1 示例:unsigned int student_id = 4294967295;
  • unsigned short:大小:通常为2字节 取值范围:0 ~ 2^16 - 1
  • insigned long:大小:4或8字节 取值范围:4字节时0 ~ 2^32 - 1;8字节时0 ~ 2^64 - 1 示例:unsigned long file_size = 1024UL; 其中UL是一个字面量后缀,它用来明确告诉编译器,这个数字常量的类型是什么 U代表Unsigned(无符号),L代表Long(长整型) 为什么需要这样做 :1.避免编译器警告和隐式转换。没有后缀时,如1024默认类型是int,当你把它赋值给一个unsigned long 变量时,编译器需要做一个隐式类型转换。这在大多数情况下没有问题,但在某些严格或需要精确定义的场景下,直接使用类型匹配的字面量是更好的实践 2.确保运算结果的正确性 注意:对于整数,小写l容易和数字1混淆,建议使用大写L
  • unsigned long long :通常为8字节 取值范围:0 ~ 2^64 - 1

4.字符型char

char本质上1字节的整数,主要用于存储字符

1.char

大小:1字节

取值范围:取决于编译器,可能是sigend char 或者 unsigned char。通常默认为-128 ~ 127

示例:char c = 'A'; (存储的是ASCII值65)

2.signed char

明确指定为有符号

取值范围:-128 ~ 127

3.unsigned char

明确指定为无符号

取值范围: 0 ~ 255

用途:常用于处理原始二级制数据

3.字符串数据类型

1.方式一:字符串数组(最常用)

char 变量名[内存占用大小] = '字符串'

英文:一个字母、一个字符、一个数字,都是占用一个字节

中文:在vs或vc中,默认情况下,一个中文占用两个字节

结束标记:占用一个字节

cpp 复制代码
#include <stdio.h>

int main() {
    // 方法1: 指定大小,不初始化
    char str1[20];
    
    // 方法2: 指定大小并初始化
    char str2[20] = "Hello";
    
    // 方法3: 不指定大小,编译器自动计算
    char str3[] = "Hello World";
    
    // 方法4: 字符逐个初始化
    char str4[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
    
    printf("str1: %s (未初始化,内容随机)\n", str1);
    printf("str2: %s\n", str2);
    printf("str3: %s (大小: %zu)\n", str3, sizeof(str3));
    printf("str4: %s\n", str4);
    
    return 0;
}

2.浮点数类型

1.float单精度浮点数

大小:通常为4字节(32位)

精度:约6-7位有效数字

范围:±3.4×10^38

声明:float 变量名 = 值;

2.double双精度浮点数

大小:通常为8字节(64位)

精度:约15-16位有效数字

范围:约±1.7×10^30

声明:double 变量名 = 值;

3.long double 扩展精度浮点数

大小:通常为10字节或16字节

精度:更高,具体取决于实现

声明:long double 变量名 = 值;

三.sizeof的用法

sizeof是C语言中一个非常重要且独特的运算符(不是函数!),用于计算其操作数所占用的内存大小,单位是字节

基本语法:(两种使用形式)

1.sizeof(类型)

2.sizeof(表达式)或sizeof 变量名

具体用法与示例:

1.对数据类型使用(必须带括号)

cpp 复制代码
#include <stdio.h>

int main() {
    printf("Size of char: %zu bytes\n", sizeof(char));
    printf("Size of int: %zu bytes\n", sizeof(int));
    printf("Size of short: %zu bytes\n", sizeof(short));
    printf("Size of long: %zu bytes\n", sizeof(long));
    printf("Size of float: %zu bytes\n", sizeof(float));
    printf("Size of double: %zu bytes\n", sizeof(double));
    
    return 0;
}

其中%zu是C语言中函数族的一个格式说明符,专门用于格式化size_t类型的变量

  • z是一个长度修饰符,它告诉 printf:"后面要打印的是一个与 size_t 类型大小相匹配的整数"。
  • u:这是类型说明符,表示这是一个无符号十进制整数

所以,%zu 合起来的意思就是:"打印一个无符号的 size_t 类型的整数"

为什么 sizeof 的返回值要用 %zu

因为 sizeof 运算符的返回类型就是 size_tsize_t 是一个在 <stddef.h><stdio.h> 等标准头文件中定义的无符号整数类型,它的大小是平台相关的,足以表示该平台上任何对象的大小。

  • 在 32 位系统上,size_t 通常等价于 unsigned int(4 字节)。

  • 在 64 位系统上,size_t 通常等价于 unsigned long(8 字节)。

使用 %zu 可以保证无论在什么平台上,都能正确、安全地打印出 size_t 的值。

2.对变量使用(括号可选)

可以直接对变量使用 sizeof,这时括号是可选的,但加上括号是更常见的风格,可读性更好。

cpp 复制代码
#include <stdio.h>

int main() {
    int num = 10;
    double price = 20.5;
    char ch = 'A';

    // 以下两种方式都是正确的
    printf("Size of num: %zu bytes\n", sizeof(num)); // 推荐,带括号
    printf("Size of price: %zu bytes\n", sizeof price);   // 不带括号
    printf("Size of ch: %zu bytes\n", sizeof(ch));

    return 0;
}

四.标识符

硬性要求:

  • 由数字、字母、下划线组成
  • 不能以数字开头
  • 不能是关键字(判断:关键字都是小写,在vs中有高亮)
  • 区分大小写

软性建议

  • 用英文单词,见名知意
  • 变量名全部小写
  • 代码文件名:全部小写,单词之间用下划线隔开,开头可以用数字
相关推荐
ss2737 小时前
手写MyBatis第96弹:异常断点精准捕获MyBatis深层BUG
java·开发语言·bug·mybatis
Stanford_11067 小时前
关于嵌入式硬件需要了解的基础知识
开发语言·c++·嵌入式硬件·微信小程序·微信公众平台·twitter·微信开放平台
白水先森7 小时前
Python 运算符与列表(list)
java·开发语言
小政同学8 小时前
【Python】小练习-考察变量作用域问题
开发语言·python
是那盏灯塔8 小时前
16.C++三大重要特性之多态
开发语言·c++
lsx2024068 小时前
网站验证:确保在线安全与用户体验的关键步骤
开发语言
Y1_again_0_again8 小时前
Java中第三方日志库-Log4J
java·开发语言·log4j
小莞尔8 小时前
【51单片机】【protues仿真】基于51单片机汽车智能灯光控制系统
c语言·单片机·嵌入式硬件·汽车·51单片机
奥特曼狂扁小怪兽8 小时前
Qt 自定义无标题栏窗口:FramelessWidget 实现与解析
开发语言·qt