#includeint main(int argc,char*argv[]) { for(unsigned int i=3;i>=0;i--) putchar('='); return 0; }
#includeint main() { int a=1,b=2,c; c=a; a=b; b=c; printf("a=%d b=%dn",a,b); a=a-b; b=b+a; a=b-a; printf("a=%d b=%dn",a,b); a^=b; b^=a; a^=b; printf("a=%d b=%dn",a,b); return 0; }
#includevoid f() { static int a=0;//a用static修饰作为静态局部变量,储存在静态区,在本文件中保存函数结束时的值 int b=0; printf("%d,%dn",++a,++b); } int main() { f();f();f();f(); return 0; }
结果如下:
#includeint main() { printf("%dn",printf("Xiyou Linux Group2%d",printf(""))); return 0; }
a为第一次声明变量不可直接作为常量进行赋值 *** 作编译错误
现将程序改为下:
#includeint main(int argc,char*argv[]) { char ch=255; int e=ch+1; int d; char c; printf("ch=%d nch+1=%c nd=%d nc=%cn",ch,e,d,c); return 0; }
结果如下:
#includeint main(int argc,char*argv[]) { char x=-2,y=3; char t=(++x)|(y++);//[或运算] 补码有一个位为1则此位为1(进行或运算时x=2,y=3) //x先++再做或运算,y先做或运算再++ printf("x=%d y=%d t=%dn",x,y,t); //因为-1的补码是11111111,与谁或运算都是它本身 t=(++x)||(y++);//[逻辑或] x,y中任意一个为真(不为0)则t为真(1) printf("x=%d y=%d t=%dn",x,y,t); return 0; }
运算结果如下:
在计算机数据都是以补码的方式存储的。
优点:
1.避免了0的编码有两个(-0,+0),一个数的编码只能有一个;
2.符号位和有效值位可以一起处理,减法通过加法就可以实现,即简化了计算机的结构设计也提高了运算速度。
#define X a+b int main(int argc,char*argv[]) { int a=1,b=1; printf("%dn",X*X);//a+b*a+b无括号,结果是3 return 0; } #define X (a+b) int main(int argc,char*argv[]) { int a=1,b=1; printf("%dn",X*X);//(a+b)*(a+b)=4 return 0; }
#includeint main() { int val=2018;//将2018赋值给变量val int *pi=2019;//将指针pi强行用常量初始化(也可以不初始化,结果相同且不会警告) pi=&val;//将指针pi指向变量val的地址 *pi=0;//将指针pi指向的值val改变为0 printf("&val=%dn",&val); printf("pi=%dn",pi);//pi=&val(随机分配地址) printf("val=%dn",val); printf("*pi=%dn",*pi);/ return 0; }
结果如下:
long int fb(unsigned int n) { long int f; if(n==1||n==2) f=1;//斐波那契前两项为1,后面的项为前两项之和 else f=fb(n-1)+fb(n-2); return(f); } int main() { unsigned int m; scanf("%d",&m); if(m>=1) printf("%ldn",fb(m)); return 0; }
改进冒泡排序(加入一个判断量change):
#includeint main() { int s[1001]; int i, j, n, t; int change=1; scanf("%d", &n); for (i = 0; i < n; i++) scanf("%d", &s[i]); for (i = 0; i < n&&change; i++)//若没有发生交换(change=0)则说明已经有序则提前退出排序 { change=0; for (j = 0; j < n - i - 1; j++) { if (s[j] > s[j + 1]) { t = s[j]; s[j] = s[j + 1]; s[j + 1] = t; change=1;//若发生了交换,change置为1 } } } printf("%lf secondsn", Times); for (i = 0; i < n; i++) printf("%d ", s[i]); }
第二种优化双向排序(也叫鸡尾酒排序)
下列出代码核心部分:
lenght = sizeof(a)/sizeof(int); lenght = sizeof(a)/sizeof(a[0]);//先计算总长度 right = lenght-1; left = 0; //先给右边的赋值,因为右边的先排出数组里面的最大值 ,外层先装一个代表right的for循环吧 while(right>left) { //下面的两个for循环是平等关系的,用一个while循环把她们括起来 for(i=left;ia[i+1]) { temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; } } right--;//这样满足下一次摆放的那个数是放在右边的倒数第二个位置上面 temp = 0; for(j=right;j>left;j--) { //内部的for循环是进行右边的数字大小排序,就是把比较小的数字放在右边的位置。 if(a[j]
其他排序法:https://blog.csdn.net/TGRD4/article/details/121567712
#include#include #include int main(int argc, char **argv) { union { short s; char c[sizeof(short)]; } un; un.s = 0x0102;//小端将高位字节排放在内存的高地址端(2在1前) if (sizeof(short) == 2) { if (un.c[0] == 1 && un.c[1] == 2) printf("大端n"); else if (un.c[0] == 2 && un.c[1] == 1) printf("小端n"); else printf("不能判断n"); } else printf("sizeof(short) = %dn", sizeof(short)); printf("un.c[0]=%dn",un.c[0]); printf("un.c[0]=%pn",un.c[0]); printf("un.c[1]=%dn",un.c[1]); printf("un.c[1]=%pn",un.c[1]); printf("un.c[2]=%pn",un.c[2]);//NULL exit(0); }
1)大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
低地址 --------------------> 高地址
0x12 | 0x34 | 0x56 | 0x78
2)小端模式:Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
低地址 --------------------> 高地址
0x78 | 0x56 | 0x34 | 0x12
这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。
但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器)。
另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。
因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。
对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。
我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
来源于博客:https://www.cnblogs.com/broglie/p/5645200.html
每一列的意义:
来源于博客:https://blog.csdn.net/zhuoya_/article/details/77418413
其他关于linux的知识:
https://blog.csdn.net/qq_23329167/article/details/83856430
https://wlybsy.blog.csdn.net/article/details/105289038
https://blog.csdn.net/qq_26219679/article/details/79647221
https://blog.csdn.net/lcgoing/article/details/86737110
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)