C/C++
C/C++
wmzjzwlzs
这个作者很懒,什么都没留下…
展开
-
C++原子操作
compare_and_swap接受一个期望的值和一个新的值,这里我们先忽略掉Ordering,后面会详细介绍,如果变量的值等于期望的值,就将变量值替换成新的值返回成功,否则不做任何修改并返回失败。最后解释一下compare_exchange两个Ordering的含义,CAS包含1.读变量,2.和期望值比较,3.写变量三个步骤,第一个Ordering表示CAS成功下即变量当前的值等于期望值时候,整个操作的Ordering,第二个Ordering表示如果当前比较失败了情况下,第一步读操作的Ordering。原创 2023-02-18 14:08:41 · 766 阅读 · 0 评论 -
C语言无符号数和有符号数比较运算
在C语言中,当一个无符号数和一个有符号数进行比较运算时,统一转成无符号数,然后进行比较大小。原创 2022-04-25 17:39:07 · 1453 阅读 · 0 评论 -
c volaitle
linux-gnu-gcc b.c -o b -O2linux-gnu-gcc a.c -o a -O2linux-gnu-objdump -D a > a.Slinux-gnu-objdump -D b > b.S原创 2021-05-28 10:01:09 · 84 阅读 · 0 评论 -
整型运算法则
C语言中比int小的整型(包括short 、unsigned short 、 unsigned char和char)在运算中都要转换成int然后进行运算。如果是unsigned的类型转换成int类型,高位补0。如果是signed的类型转换成int类型,如果原来最高位是1则补1,如果是0则补0。常量是int。...原创 2021-04-13 22:57:45 · 504 阅读 · 0 评论 -
proc smaps
awk 'BEGIN{total_rss = 0;}{if (match($1, "Rss")) {print $0; total_rss += $2;} }END{print total_rss}' /proc/443/smaps#awk 'BEGIN{total_pss = 0;}{if (match($1, "Pss")) {print $0; total_pss += $2;} }END{print total_pss}' /proc/443/smaps原创 2021-03-26 13:56:26 · 213 阅读 · 0 评论 -
gcc 参数
-fsanitize=address:g++在编译源码的时候,加上-fsanitize=address,生成的程序中当有堆内存越界与内存泄漏的时候,可以检测出来-fno-omit-frame-pointer:数调用回溯-fopenmp: support openmp-fno-aggressive-loop-optimizations:会导致无限循环行为消失-Wl,-rpath-link:指定间接依赖库的目录-Wl,-rpath:指定间接依赖库的目录...-L 指定链接时直接依赖的优先搜索目录原创 2021-03-26 10:56:22 · 344 阅读 · 0 评论 -
panel_id 为何为16
int register_panel_id(int id_value) { int i;dprintf(CRITICAL, "song 1 id_value %d \n",id_value); panel_is_valid = 2; for (i = 0; i < 4; i++) { if (lcd_pan...原创 2016-12-16 10:23:10 · 1296 阅读 · 0 评论 -
数组越界的另一问题
除了上面提到的for变while。这句panel_id = DEFAULT_PANEL_ID;如果仅从c语言语法理解panel_id 肯定为0,可是实际的逻辑是:if (lcd_panel_id_table[i].driveric_register_id == 0) { dprintf(CRITICAL, "No correct d...原创 2016-12-16 09:19:28 · 208 阅读 · 0 评论 -
for循环反汇编变为while
for (i = 0; i < 4; i++) { if (lcd_panel_id_table[i].driveric_register_id == 0) { dprintf(CRITICAL, "No correct driver ic ID...\n"); p...原创 2016-12-15 19:31:13 · 252 阅读 · 0 评论 -
c语言加减法
a为x位宽的数,b为x位宽的数,c为2x位宽的数,c=a+/-b,则先根据a,b是否为有符号或无符号进行位宽拓展后,再进行运算原创 2015-08-29 22:47:46 · 831 阅读 · 0 评论 -
c语言除法
除法是要分有符号和无符号的,当无符号与有符号进行运算时,默认转为无符号除法原创 2015-08-29 21:47:26 · 632 阅读 · 0 评论 -
c语言乘法
a为x位宽的数,b位x位宽的数,c为2x位宽的数,c=a x b,进行无符号运算时:a(x位)→a(2x位,最前面的x位为0),b(x位)→b(2x位,最前面的x位为0),进行有符号运算时:a(x位)→a(2x位,最前面的x位根据a的正负进行补0或1),b(x位)→b(2x位,最前面的x位根据b的正负进行补0或1),若c也为x位,则不用考虑符号位...原创 2015-08-29 21:31:38 · 439 阅读 · 0 评论 -
无符号与有符号运算,先进行位拓展(按原类型),再全部转为无符号进行运算...
#include<stdio.h>int main(){char i= -1;unsigned char j= -1;unsigned int k = -1;printf("%u ok %u\n", k/i,k/j);}原创 2015-04-22 16:04:20 · 206 阅读 · 0 评论 -
C语言指针类型转换
C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值。不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个地址就是硬件访问的依据,而名字只是提供给程序员的一种记住这个地址的方便一点的方法。但是,不同的变量在机器中都是0-1代码,所以,我们不能简单的通过检查一个值的位来判断它的类型。例如,定义如下:int a; float b;doubl...原创 2013-01-19 18:53:26 · 854 阅读 · 0 评论 -
C语言柔性数组
1、柔性数组 C语言中结构体的最后一个元素可以是大小未知的数组 C语言中可以由结构体产生柔性数组 typedef struct _soft_array { int len; int array[]; }SoftArray; 可以试试,printf("%d", sizeof(SoftArray));打印出它的sizeof()大小 结果是4...原创 2012-11-04 10:42:13 · 108 阅读 · 0 评论 -
赋值过程中的类型转换
1:将实型数据(包括单,双精度)赋给整型变量时,先对实数取整(即舍去小数部分),然后赋予整型变量。2:将整形数据赋给单双精度变量时,数值不变但以实数形式存储到变量中。3:将一个double型数据赋给float变量时,截取其其前面7位有效数字。4:字符型数据赋给整型变量时,将字符的ASCII码赋给整型变量。5:将一个占字节多的整形数据赋给一个占字节少的整型变量或字符变量(例如把一个4...原创 2012-10-10 13:26:27 · 634 阅读 · 0 评论 -
数据类型运算赋值另类玩法
# include<stdio.h>void main(){ // 1.int a; if(3!=0) { // 2.int a; a=3; } printf("%d\n",a);}//when "int a "set in 2,fail to bianyi cross变量的生存周期检验(在复合语句中定义的变量...原创 2012-10-08 22:40:16 · 107 阅读 · 0 评论 -
c语言小发现 ?
有符号数值与无符号数值比较是以补码形式比较的。。今天发现不一定,int是的,char不是的,char与int比时也不是的# include//int:4 char:1 float:4 double:8 short int:2void main(){ char a;unsigned char b;int c;a=-1;b=2;c=-1;if(c{printf("hello\n")...原创 2012-07-24 00:15:10 · 112 阅读 · 0 评论