资讯详情

资讯详情

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

结构体因为在描述一个内容时候自带的内置类型不够于是通过结构体进行自定义创造合适的类型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;}对于结构体更推荐第二种写法会更加的灵活初始化初始化的时候可以直接按照顺序进行初始化也可以在括号里面分别按照自己的想法进行初始化注意需要描述的时候需要写出被写的项目并且在他前面加一个“.”并且字符串需要用引号括起来赋值数组不可以直接整体赋值但是结构体可以整体赋值结构成员访问操作符直接访问间接访问结构体传参将一个结构体的信息传递给函数可以通过传递结构体变量或者变量的地址底层程序设计进制认识及进制转换有281016 进制。并且他们之间可以相互转化2进制从右到左第一位开始时2^0 开始 往左多少位次数上加一其他同理16进制从10开始用A,B,C,D,E,F代替进制转化对于816进制转化8进制从又开始3个数字组成一个2进制16进制则是4个数字组成2进制中的原码反码补码对于有符号整数来说有符号位以及数值位两部分并且最高位的第一位是被当作符号位其余是数字位。用0 表示正 1 表示负对于正整数来说原反补码都是相同的但是对于负整数来说表达方式不太一样原码时直接按照2进制翻译出来得到的。反码符号位不变其余位次按位取反得到。补码:反码1原码得到补码可以取反1 同理补码得到原码也可以取反1对于无符号整数。三种表达相同没有符号位 每一位上都是数值位在内存中存放的是2进制的补码存放时的大小端字节序小端字节序低位字节内容放到低地址处高位字节保存到内存中的高地址例如 输入 11223344 时 11 属于高位地址。44属于低位地址输出的时候输出为 44332211大段字节序低位字节出现到高内存处更加符合人类思维判断大小端输入一个整型数字1 取出地址后 将他强制转换成char 类型输出如果 1的话就是小端浮点数的存储浮点数和整型数字的存储不同在内存中的存储也是按照SME进行存储因为这些导致精度不够容易 也导致整数类型进行的时候与正常不一样移位操作符左移右移因为编译器编译时候 会分为逻辑右移以及算术右移逻辑右移的时候 左边用0填充右边丢弃算术右移时 左边的用原该值的符号进行填充右边丢弃a b对于无符号类型的进行逻辑右移 最高位置补0 结果 a/ 2^b 结果再向下取整有符号类型的 当a 0的时候时 算术右移结果同上a0的时候通常时算术右移最高位置补符号位无论左移还是右移 最好用无符号类型有符号也可以强制转换成无符号类型再进行位操作符 | ^ ~ 按位与 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^a0两个相同的数字异或是0a^00 任何数字和0异或还是它自己a^ b ^ a a ^ a^ b 异或支持交换在编码的时候通常会选择1进行编码计算一个2进制中1的个数通常和计算一个十进制的数字1的个数类似进行 / 以及%进行2进制的时候会选择进行 %2 以及 /2整型和无符号整型得到的结果不同通过移位操作符去得到想得到的位置想要得到一个二进制中1的个数可以循环32次去找1但是方法太过于低效引用函数进行n nn-1判断一个数字是不是2的幂次方
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →