#includeint i=0;// i=1~5是< int main(int argc,char*argv[]) { i--; if(i>sizeof(i)) printf(">n"); else printf(" "
sizeof的返回值类型是一个size_t型,size_t(typedef unsigned int size_t),它是一个unsigned int型。
而x 是 int 类型,比较时会将 x 变为 unsigned int类型,而 -1 变为 unsigned 类型是一个很大的整
数,所以是大于。
#include#define A 2+2 #define B 3+3 #define C A*B int main(int argc,char*argv[]) { printf("%dn",C); return 0; }
宏:http://C语言宏定义、宏函数、内置宏与常用宏_Apollon_krj的博客-CSDN博客
#includeint main(int argc,char*argv[]) { char str[]="welcome to xiyoulinuxgroup"; printf("%zu %zun",strlen(str),sizeof(str));//26 27 return 0; }
%zu输出size_t型。size_t在库中定义为unsigned int。
如果%zu不能使用,可以用%u取代。但%zu不能输出负数。
关于sizeof,strlen:https://blog.csdn.net/niushuai666/article/details/7677210
#includevoid fun() { int x=0; static int num=0; for(int i=0;i<5;i++) { x++; num++; } printf("x = %d num = %dn",x,num);//static静态局部变量在函数结束后仍保留值用于下一次运算 } int main(int argc,char*argv[]) { fun();fun();fun();fun(); return 0; }
结果如下:
#includeint main(int argc,char*argv[]) { int number; unsigned mask; mask=1u<<31;//将1转换为unsigned int类型再将其32位二进制码向左移31位 scanf("%d",&number); while(mask) { printf("%d",(number&mask)?1:0);//转换为32位的二进制数(numberh和mask此为都不为0则转为1,有一个为0则是0) mask>>=1;//mask二进制数向右移一位一直到高位全部补为0退出 } return 0; }
结果如下(输出32位十六进制数):
(<<左移运算符)
左移运算符是用来将一个数的各二进制位全部左移若干位,右补0。高位左移后溢出,舍弃。
例如:
将a的二进制数左移2位,右补0。若a=15,即二进制数00001111,左移2位得00111100,即十进制数60。
3 << 2,则是将数字3左移2位。即00000011----->00001100(12);
(>>右移运算符)
按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃)。高位的空位补符号位,即正数补零,负数补1。
例如:
11 >> 2,则是将数字11右移2位,即00001011------>00000010(2);
#includeint main(int argc,char*argv[]) { char *str="xiyou linux group"; printf("%cn",*(str+2));//改变优先级则可以先移动到y的地址再取值 printf("%cn",*str+1);//先取到x(*str)后加1得到字母顺序表的后一个字母y return 0; }//结果都是y
#includeint main(int argc,char*argv[]) { double a=3.14; float b=a;//取a的float范围赋值给b(有精度的缺失) if((float)a==b)//a暂时被强制转换为了float类型与b相同 { printf("xiyou "); } if(a!=b)//两个不同类型的数不相等(必须在用一个精度内进行比较相等) { printf("linuxgroupn"); } return 0; }//xiyou linuxgroup
#includeint main(int argc,char*argv[]) { int a[6]={0x6f796958,0x694c2075,0x2078756e,0x756f7247,0x30322070,0}; printf("%dn",printf("%s",(char*)a)); return 0; }//Xiyou Linux Group 2020
大小端:字节序:大端法和小端法 - Broglie - 博客园
#includeint main(int argc,char*argv[]) { int a[2][3]={{5,7},{5,2}};//按照给定格式进行元素分配 int b[2][3]={5,7,5,2};//按照顺序分配,一行满了再换下一行 int c[2][2]={{5,7},{5,2}}; int d[2][2]={5,7,5}; printf("%d %dn",a[1][1],b[1][1]);//2 0 printf("%d %dn",c[1][1],d[1][1]);//2 0 return 0; }
#includeint main(int argc,char*argv[]) { int a=1; printf("%dn",*(char*)&a);//对a取地址得到1的地址并且转换为指针变量,再取此指针指向的地址就是a,得到a=1*/ return 0; }//1
#includeint main(int argc,char*argv[]) { const char a[]="xiyoulinux "; char*b="xiyoulinux "; printf("%sn",a); printf("%sn",b); return 0; }
详细内容: http://谈谈C语言从源文件变为可执行文件之间发生的过程详解(C程序的编译链接运行)_呋喃吖的博客-CSDN博客
改进冒泡排序(加入一个判断量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]
其他排序法:总结排序方法(未完)_TGRD4的博客-CSDN博客
(1)/(2):查看目录/文件
ls 查看当前目录下的所有目录和文件
ls -a 查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l 或 ll 列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
ls /dir 查看指定目录下的所有目录和文件 如:ls /usr
前两个命令:(绿标为当前操作文件)
补充:
绿色---->代表可执行文件
红色---->代表压缩文件
深蓝色---->代表目录
浅蓝色----->代表链接文件
灰色---->代表其它的一些文件
第三个命令:(两个效果一样)
最后一个命令:
也可以直接通过文件管理器复制文件路径,粘贴在ls后面。
双杠线和单杠线都可以使用,下列输出一致:
(3):创建目录
mkdir aaa 在当前目录下创建一个名为aaa的目录
mkdir /usr/aaa 在指定目录下创建一个名为aaa的目录
目录切换
命令:cd 目录
cd / 切换到根目录
cd /usr 切换到根目录下的usr目录
cd ../ 切换到上一级目录 或者 cd ..
cd ~ 切换到home目录
cd - 切换到上次访问的目录
新建文件
命令:touch 文件名
示例:在当前目录创建一个名为aa.txt的文件 touch aa.txt
运行如下:(在myworld目录下创建了一个ok目录显示后切换到ok目录,在ok目录下创建了一个新文件txt1.txt并将其显示,最后再切换回原目录)
(4):拷贝目录
命令:cp -r 目录名称 目录拷贝的目标位置 -r代表递归
示例:将/usr/tmp目录下的aaa目录复制到 /usr目录下面 cp /usr/tmp/aaa /usr
注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不用写-r递归
此时ok目录中存在一个txt1.txt文本文件需要拷贝到另一个目录myworld中(操作如下):
此时指定查看两个目录下的文件:
txt1.txt已被成功复制
如果需要复制的是空文件也可以直接使用mkdir在目标目录下创建一个新文件。
参考博客:Linux常用命令_Demon的博客-CSDN博客_linux常用命令



