回文整数:
CPU分支预测:
// likely表示x经常成立
#define likely(x) __builtin_expect(!!(x), 1)
// unlikely表示x不经常成立
#define unlikely(x) __builtin_expect(!!(x), 0)
串行:5 x 5
并行:5 + 4,取指令的只取指令,各司其职。
CPU最讨厌分支结构,CPU并行的,需要预先加载,如果预先加载的没执行,则大大降低CPU运行效率。
if没执行时,CPU就要已经预先加载后面的指令。
---------------------------------------------
循环结构:
while (表达式) { // 当....型循环,至少执行0次
代码块;
}
do { // 至少执行1次,先做,再判断。
代码块
} while ( 表达式); // 注意分号
for (初始化; 循环条件; 执行后操作) { // 当....型循环,至少执行0次
代码块:
}
for ( ; ; ) 里面可以省略一个或多个,在其他位置写
continue; 中止本次循环,继续下次循环。
break; 结束循环。
C语言没有左值,右值概念。
假 && 这里就不执行了,短路原则
真 || 后面就不执行了。
// 10.struct_program.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int a = 0, b = 0;
if ((a++) && (b++)) { // 先a值判断后 再++
printf("true\n");
} else {
printf("false\n");
}
printf("a = %d, b = %d\n", a, b); // a = 1, b = 0 逻辑与短路原则
srand(time(0)); // 生成随机种子
int n, count = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int val = rand() % 100;
count += (val & 1);
i && printf(" ");
printf("%d", val);
}
printf("\n");
printf("count: %d\n", count);
return 0;
}
输出格式:
for (int i = 0; i < 5; i++) {
i && printf(" ");
i == 0 || printf(" ");
printf("%d", i);
}
printf("\n");
stdlib.h
随机整数 rand()--> 伪随机,计算机没有真正的随机过程。
srand(time(0)); // 生成随机种子(当前系统的时间戳,单位:秒)
time.h
time(0)获取动态时间