» C语言快速入门 » 1. 基础篇 » 1.2 基础类型

基础类型

C中的基础类型如下表所示:

类别 类型
整数 char, unsigned char, signed char, short, unsigned short, int, unsigned int, long, unsigned long
浮点数 float, double, long double
void

初始化

int main() {
    int i = 0;
    char a[6] = {'H','e','l','l','o','\0'};
    char b[] = "Hello";
    char* c = "Hello";
    return 0;
}

整型提升

整型提升是C中的一个转换过程,它在某些情况下自动将"较小"的整数类型转换为"较大"的整数类型,以避免在表达式或函数调用期间发生数据丢失。这种提升遵循C标准定义的规则。

例如:

#include <stdio.h>

int main() {
    char charVar = 127;  // 具有最大正值的有符号字符
    int intVar = 1000;
    
    // 如下表达式将进行整型提升,char -> int
    int result = charVar + intVar;

    printf("Result: %d\n", result);

    return 0;
}

类型限定符

在 C 中,类型限定符用于指定变量的附加属性。

int main() {
    // 只能通过此指针访问
    restrict int* a;

    // 常量,初始化后其值不可修改
    const int b;

    // 同一时间内,只能由一个线程修改
    atomic int c;

    // 易变量,变量的值可以随时由程序中未明确指定的外部因素更改
    volatile int d;
    return 0;
}

存储类别说明符

除了上述限定符之外,C 还有一系列存储类别说明符,它们定义了对象的存储期。

int main() {
    // extern 存储类用于声明在另一个源文件中定义的变量,
    // 或者将在程序中稍后定义。
    extern int a;

    // static 存储类用于使变量在函数调用之间保持其值。
    // 也用于文件作用域(全局)变量,将其可见性限制在声明它的文件。
    static int b;

    // register 存储类建议编译器将变量存储在寄存器中以加快访问速度。
    register int c;

    // auto 存储类是局部变量的默认存储类,很少显式使用。
    auto int d;

    // _Thread_local 指示变量具有线程存储期
    _Thread_local int e;
    return 0;
}

Typedef

typedef 用于为已有类型添加新名称。

#include <stdio.h>

typedef unsigned char byte;

int main() {
    byte b = 'a';
    return 0;
}

位操作

C 中的位操作用于操作变量的各个位。位运算符包括AND(&),OR(|),XOR(^),左移(<<)和右移(>>)。

#include <stdio.h>

int main() {
    // 位与(&)示例
    unsigned int x = 0b001;  // 1 的二进制表示
    unsigned int y = 0b101;  // 5 的二进制表示
    unsigned int result_and = x & y;

    printf("Bitwise AND: %u\n", result_and);  // Output: 1

    // 位或(|)示例
    unsigned int result_or = x | y;

    printf("Bitwise OR: %u\n", result_or);  // Output: 5

    // 位异或(^)示例
    unsigned int result_xor = x ^ y;

    printf("Bitwise XOR: %u\n", result_xor);  // Output: 4

    // 位左移(<<)示例
    unsigned int result_left_shift = x << 2;

    printf("Bitwise Left Shift: %u\n", result_left_shift);  // Output: 4

    // 位右移(>>)示例
    unsigned int result_right_shift = y >> 1;

    printf("Bitwise Right Shift: %u\n", result_right_shift);  // Output: 2

    return 0;
}

复合赋值

C 中的复合赋值是一种将算术或位运算与赋值操作结合的简写符号。复合赋值运算符包括 +=-=*=/=%=&=|=^=<<=>>=

#include <stdio.h>

int main() {
    int x = 58;
    x += 2;
    x /= 2;
    printf("x = %d\n", x);
    return 0;
}

代码挑战

编写一个名为 countSetBits 的 C 函数,该函数以无符号整数作为输入,并返回其二进制表示中设置位(1)的个数。

Loading...
> 此处输出代码运行结果
上页
下页