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)的,所以会偏移一个数组长度。

posted @   Yihoyo  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示