基础类型
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...
> 此处输出代码运行结果