Some Question
1.指令集位数、CPU位数
cpu位数=cpu中寄存器位数=处理器架构位数=指令集位数=寻址范围位数,但是同时可能向下兼容,比如64位cpu运行32位系统
主流的CPU架构按照复杂和精简指令集可以按照如下区分:
CISC:x86;
RISC:arm、RISC-V、LoongArc(龙芯)、MIPS;
(K210)用的RISC-V。
2.一个尽可能优秀的MAX宏
#include <stdio.h>
//宏定义的结果为最后一行代码的结果
#define MAX(a, b) ({ \
__typeof(a) _a = a;\
__typeof(b) _b = b;\
_a > _b ? _a : _b;\
})
//定义P宏,用于输出, #a表示将表达式进行字符串化
#define P(a) {\
printf("%s = %d\n", #a, a);\
}
int main() {
int a = 7;
P( MAX(2, 3));
P(5 + MAX(2, 3));
P(MAX(2, MAX(3,4)));
P(MAX(2, 3 > 4 ? 3 : 4));
P(MAX(a++, 6));
P(a);
return 0;
}
原因:https://blog.csdn.net/u011386173/article/details/119918556
3. 数组名a+1和&a+1的区别
C/C++里面的数组名字会退化为指针,所以数组名a实际指的是数组的第一个元素的地址。而数组名作为指针来讲有特殊性,它正在它所指向的内存区域中,&a的值和a的数值是相同的(可以输出观察一下),但是类型和意义不同。而指针的加法操作和指向的数据类型密切相关。
比如:
int a[10]; a就相当于int ,如果是对它加1(a + 1)是相当于a + 1 * sizeof(int)。但是&a的类型则相当于int **,a是所谓指向数组的指针,是数组元素类型的二级指针,对它加1是相当于 &a + 1 * sizeof(a)的,所以会偏移一个数组长度。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律