ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

结构体以及底层程序设计的认识

结构体以及底层程序设计的认识

结构体

因为在描述一个内容时候,自带的内置类型不够,于是通过结构体进行自定义创造合适的类型

structStu{charname[20];intage;charsex[5];charid[20];};//注意这里的分号不能丢

结构体变量

structStu{charname[20];intage;charsex[5];charid[20];}s1,s2,s3;
structStu{charname[20];intage;charsex[5];charid[20];};structStus1;intmain(){structStus2return0;}

对于结构体更推荐第二种写法,会更加的灵活

初始化

初始化的时候可以直接按照顺序进行初始化
也可以在括号里面分别按照自己的想法进行初始化
注意需要描述的时候需要写出被写的项目并且在他前面加一个“.”并且字符串需要用引号括起来

赋值

数组不可以直接整体赋值,但是结构体可以整体赋值

结构成员访问操作符

直接访问

间接访问


结构体传参

将一个结构体的信息传递给函数
可以通过传递结构体变量或者变量的地址

底层程序设计

进制认识及进制转换

有2,8,10,16 进制。并且他们之间可以相互转化
2进制,从右到左第一位开始时2^0 开始 往左多少位,次数上加一
其他同理
16进制从10开始用A,B,C,D,E,F代替
进制转化

对于8,16进制转化

8进制从又开始3个数字组成一个2进制
16进制则是4个数字组成

2进制中的原码,反码,补码

对于有符号整数来说有符号位以及数值位两部分,并且最高位的第一位是被当作符号位,其余是数字位。用0 表示正, 1 表示负

对于正整数来说原,反,补码都是相同的

但是对于负整数来说表达方式不太一样,原码时直接按照2进制翻译出来得到的。反码符号位不变,其余位次按位取反得到。补码:反码+1

原码得到补码可以取反+1 同理补码得到原码也可以取反+1

对于无符号整数。三种表达相同,没有符号位, 每一位上都是数值位

在内存中,存放的是2进制的补码

存放时的大小端字节序

小端字节序
低位字节内容放到低地址处,高位字节,保存到内存中的高地址
例如 输入 11223344 时 11 属于高位地址。44属于低位地址,输出的时候输出为 44332211
大段字节序
低位字节出现到高内存处
更加符合人类思维

判断大小端

输入一个整型数字1 取出地址后 将他强制转换成char 类型,输出如果== 1的话就是小端

浮点数的存储

浮点数和整型数字的存储不同

在内存中的存储也是按照S,M,E进行存储



因为这些导致精度不够容易 也导致整数类型进行的时候与正常不一样

移位操作符


左移

右移

因为编译器编译时候 会分为逻辑右移以及算术右移
逻辑右移的时候 左边用0填充,右边丢弃
算术右移时 左边的用原该值的符号进行填充,右边丢弃
a >> b
对于无符号类型的进行逻辑右移 最高位置补0 结果 = a/ 2^b 结果再向下取整
有符号类型的 当a>= 0的时候时 算术右移,结果同上,a<0的时候通常时算术右移,最高位置补符号位

无论左移还是右移 最好用无符号类型,有符号也可以强制转换成无符号类型再进行

位操作符 & | ^ ~

& 按位与 a & b 对应二进制有0就是0 ,同时为1才是1
| 按位或 a | b 对应二进制有1就是1, 同时为0才是0
^ 按位异或 a ^ b 对应二进制相同为0 相异为1
~ 按位取反 ~a 对于所有的二进制,逐个取反 0变成1 1变成0

必须是整数

可以直接进行计算

计算的时候用补码

有0就是0 ,同时为1才是1
有1就是1, 同时为0才是0


计算之后再进行取反+1
相同为0 相异为1

逐个取反 0变成1 1变成0

实现两个整数的交换

1 创建一个临时变量进行储存交换

直接进行交换

存在溢出的风险
异或运算的特点
a^a=0两个相同的数字异或是0
a^0=0 任何数字和0异或还是它自己
a^ b ^ a = a ^ a^ b 异或支持交换



在编码的时候,通常会选择1进行编码

计算一个2进制中1的个数

通常和计算一个十进制的数字1的个数类似
进行 / 以及%
进行2进制的时候会选择进行 %2 以及 /2


整型和无符号整型得到的结果不同

通过移位操作符去得到想得到的位置

想要得到一个二进制中1的个数可以循环32次去找1

但是方法太过于低效

引用函数进行

n = n&(n-1)

判断一个数字是不是2的幂次方

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进