![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机底层
文章平均质量分 88
程序员李哈
本平台分享技术帖,某站:李哈zzz分享技术视频
展开
-
为什么C语言需要指定平台开发?
笔者心血来潮,特意站在初学者角度去思考为什么C语言需要指定平台去开发呢?物有本末,事有终始,知其先后,则近道矣。C语言的语法GCC是帮开发者实现了跨平台,但是不同的操作系统和不同CPU提供的接口不一致,所以需要C语言开发者去完成适配工作。原创 2022-11-15 23:11:36 · 532 阅读 · 0 评论 -
C语言中volatile关键字的详解
版本信息:Linux操作系统,x86架构,Linux操作系统下GCC9.3.1版本。GCC 9.3.0手册。看了外面很多写volatile的文章,笔者算是认为“乱七八糟”,根本没有任何论证就在下定义,所以笔者特意写这篇关于volatile的文章。先看一下GCC文档给的volatile说明:既然上述说明了volatile关键字可以避免编译器优化,那么下面笔者用2个列子来说明一下。// 没优化:int a = 10;int b = a;int c = a;int原创 2022-10-27 20:21:10 · 2077 阅读 · 0 评论 -
布隆过滤器的浅入浅出
物有本末,事有终始,知其先后,则近道矣。首先,我们需要明白,布隆过滤器是什么呢?为什么要存在布隆过滤器?而布隆过滤器又解决了一些什么问题呢?布隆过滤器的弊端是什么呢?一言以蔽之,用bit位(因为1字节 = 8bit,所以称为bit数组)用其中某一位来表示某个值是否存在(建立映射,1代表已经映射,0代表还未映射)。原创 2022-10-17 23:06:20 · 454 阅读 · 0 评论 -
汇编层面来理解C语言的值传递和引用传递的区别
写在前面:突然心血来潮,想给读者写一篇关于汇编层面来理解值传递和引用传递的区别的帖子。版本信息:Linux系统(centos7)、x86汇编、32位系统、gcc 4.8.5.c语言代码如下:#includeint add_value(int a,int b){ int c = a; int d = b; return c + d;};int add_reference(int *a,int *b){ int *c = a; int *d = b...原创 2022-08-18 23:23:24 · 556 阅读 · 0 评论 -
彻底理解位运算——与(&)、非(~)、或(|)、异或(^)
与&:2个二进制进行&操作,只有当2个的数值都为1时,结果才是1。其他均返回0;案例如下:15& 5 =5将15和5的二进制分别展示出来由于只有当2个二进制都为1时,结果才为1,其他均为0,所以结果由下图所示。规律如下:"二进制截断",为何说是二进制截断呢,我们用上面的例子来说,15的二进制低4位都是1,而5的二进制是0101。因为&操作必须都为1结果才是1,所以我们是不是可以理解成5把15的其他位的1给截断成0了呢?那再举个例子,0xFFFF =65535 = ...原创 2022-07-28 11:24:45 · 3855 阅读 · 1 评论 -
彻底理解位运算——左移、右移
相信大家在各种语言各种框架中都能看到二进制的操作。左移、右移、&、|、^等等操作。那么这篇帖子让各位彻底弄懂左移、右移。首先先区分那个是左移、那个是右移,这很简单,从箭头指向的方向来区分。右移左移:很简单的来说就是把当前的二进制,整体往左边移动N个单位,N取决于你的表达式。那么用一个例子,和画图来理解一下吧。32 ...原创 2022-07-25 12:37:12 · 71383 阅读 · 14 评论