基础(二进制操作、判断字符长度(数据大小)、排序、简单结构体和指针)

编译器(vs2013):

打印至控制台:VS2013 (项目名称右击鼠标--属性--配置属性--链接器--系统--子系统<改为控制台>)

字体大小:ctrl + 鼠标滚轮可修改字体大小

1.每个文件第一行添加东西:找到安装目录 -- vc -- vcprojectitems -- newc++file.cpp(此文件添加:#define _CRT_SECURE_NO_WARNINGS)

 

 10.如果发现光标占了一个位置按下 insert 即可

 

符号:

二进制操作: << >> & | ^ ~ 源码 反码 补码;

二进制简单转换:

二进制:    1         1           1            1
十进制: 1*2^3=8   1*2^2=4     1*2^1=2      1*2^0=1   
如:十进制3=0011(2+1);十进制5=0101(4+1)

其它进制转成十进制也是一样如八进制:
八进制:     1          3           2
十进制:  1*8^2=64   3*8^1=24    2*8^0=2

<< (二进制左移):转换成二进制数据整体向左移动一位,右边空出来一位补0;

& (按位与):转换成二进制数据只要其中有一个为假(0)则结果为假(0),也就是只有两个同时为真(1)结果才为真(1);

| (按位或):转换成二进制数据只要其中有一个为真(1)则结果为真(1),也就是只有两个同时为假(0)时结果才为假(0);

^ (按位异或):转换成二进制数据两个数字相同是为0,两数字相异时为1;

~ (按位取反):字面意思;

 

注: 

1:有符号的整形,最高位是符号位,1是负数,存的是补码 ;源码符号位不变其它取反得到反码,反码加一得到补码;任何整数数在内存里存的都是补码,反码是中间状态。正数 源码、反码、补码相同;负数存的就是反码;

2:int a = 10;int b = a++; // a = 11; b = 10; 不管怎样a都会改变 ++在后面接数为原来的值

3:0x000000140x表示的是存储的是16进制的数据

4:大端字节存储是指高位放在低地址处, 小端字节存储是指地位放在低地址处。如要存储0x11223344,大端存储为:0x11223344,小端存储为:0x44332211

5:static修饰局部变量会使其生命周期变长且不销毁,修饰全局变量和方法会让它只能在本文件内使用

6:函数内返回栈空间的地址是没用的,出了这个函数就没有了;可以用static修饰一下(static修饰局部变量会使其生命周期变长且不销毁),使其变成静态空间里的地址;或者返回动态开辟的空间(堆区里的)。

 

 

函数:

打印:printf("xxx\n");// 库函数 基于stdio.h

接受并自定义字符:scanf("%d%d", &a1, &a2); // 库函数 基于stdio.h

判断字符长度

char a[] = {'a','a','\0'};
char a1[] = "aa"
printf("%d",strlen(a)); 
// 库函数 基于stdio.h

判断数据大小

printf("%d\n", sizeof(int));
printf("%d\n", sizeof(char*));
// 库函数 基于string.h

修改结构体里的数组:strcpy(s.name, "李四");   // 库函数 基于string.h

断言

assert(xx != NULL)
// 接一个表达式,条件不成立时报错;库函数 基于 assert.h

 快速排序:

int cmp_int(const void* e1, const void* e2){ // 比较两个整形值的大小,1大于,0等于,-1小于
    return *(int*)e1 -*(int*)e2;
}

int main(){

    int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    qsort(arr, sz, sizeof(arr[0]), cmp_int);
    int i = 0;
    for (i = 0; i < sz; i++){ printf("%d ", arr[i]);}

    return 0;
};

------------------------------------

int cmp_float(const void*e1, const void*e2){ // 比较两个浮点型的大小,1大于,0等于,-1小于
    return ((int)(*(float*)e1 - *(float*)e2));
}

int main(){

        float f[] = { 9.0, 8.0, 7.0, 6.0, 5.0, 4.0 };
        int sz = sizeof(f) / sizeof(f[0]);
        qsort(f, sz, sizeof(f[0]), cmp_float);
        int j = 0;
        for (j = 0; j < sz; j++){ printf("%f ", f[j]); }
        
    return 0;
};

---------------------------------------

 修改预处理结构默认对齐数:

#pragma pack(4) // 设置默认对齐数4,一般设置2的次方数,如果没有设置设计的时间小小放在一起。注:32位的每次读4个字节 
struct S
{
    char c1;//1
    double d;//8 4 4
};
#pragma pack() // 取消设置的默认对齐数

 找出结构体里每一项相对于起始位置的便宜量:

struct S{
    char c;
    int i;
    double d;
};

int main(){
  printf("%d\n", offsetof(struct S, c));  // 0
  printf("%d\n", offsetof(struct S, i));  // 4
  printf("%d\n", offsetof(struct S, d));  // 8
  return 0;  
}
// offseto宏,基于stddef.h

 

 

 

结构体及指针:

// 注:int a = 10; int* p = &a; printf("%d\n",*p); 打印p是地址  // 不加*就是地址 ,加就是内容

struct st {
char name[20];
int age;
char sex[5];
int id;
};
struct st t = { "李四", 18, "男", 1250 };
struct st s = { "张三", 18, "男", 1250 };

struct st* p = &s;
printf("%s\n", p->name); // 通过地址的方式 int* 大小及地址大小
printf("%s\n", (*p).name); // 通过内容的方式

//s.age = 30;
//printf("%d\n", s.age);
//strcpy(s.name, "李四");
//printf("%s\n", s.name);

 

posted @ 2021-07-22 14:42  封兴旺  阅读(137)  评论(0编辑  收藏  举报

联系方式: 18274305123(微信同号)