二进制代码

[转帖]二进制兼容

ぐ巨炮叔叔 提交于 2020-01-10 04:36:10
二进制兼容 https://www.jianshu.com/p/87febb375969 0.122016.07.28 16:32:57字数 721阅读 2,539 1. 什么是二进制兼容 所谓“二进制兼容性”指的就是在升级(也可能是 bug fix)库文件的时候,不必重新编译使用这个库的可执行文件或使用这个库的其他库文件,程序的功能不被破坏 2. 二进制不兼容会造成什么后果 如果库A升级没有能够做到二进制兼容,那么所有依赖它的程序(或库)都需要重新编译,否则会出现各种未知异常,其直接现象就是程序莫名其妙地挂掉。 3. 哪些常见做法会破坏二进制兼容 (1) 给函数增加默认参数,现有的可执行文件无法传这个额外的参数 (2) 增加虚函数,会造成 vtbl 里的排列变化。(不要考虑“只在末尾增加”这种取巧行为,因为你的 class 可能已被继承。) (3) 增加默认模板类型参数 例如:template<typename T> class Grid{}变更为template<typename t, typenameContianer=vector> class Grid{} (4) 改变 enum 的值,把 enum Color { Red = 3 }; 改为 Red = 4。这会造成错位。当然,由于 enum 自动排列取值,添加 enum 项也是不安全的,除非是在末尾添加 (5)

Python3 基本知识

落爺英雄遲暮 提交于 2020-01-10 00:52:27
一.数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典) Python3 的六个标准数据类型中: 不可变数据(3 个): Number(数字)、String(字符串)、Tuple(元组); 可变数据(3 个): List(列表)、Dictionary(字典)、Set(集合) 代码段 # tpye方法用来查询字符类型 print("tpye方法用来查询字符类型;",type(1*1)) # 输出浮点数 print("单斜杠会转成浮点数;",type(2/2)) # 输出整数 print(type(2//2)) print("保留为整数;",type(1//2))  输出结果 tpye方法用来查询字符类型; <class 'int'> 单斜杠会转成浮点数; <class 'float'> <class 'int'> 保留为整数; <class 'int'>    二.各进制的表示与转换 代码段 # 二进制表达方法,前面需要加上0b 0b10 print("二进制表达方法,前面需要加上0b:",0b10) # 八进制表达方法,前面需要加上0o 0o11 print("八进制表达方法,前面需要加上0o:",0o11) # 十六进制表达方法,前面需要加上0x

java中位运算^,&,<<,>>,<<<,>>>总结

梦想的初衷 提交于 2020-01-09 21:38:38
1.^(亦或运算) , 针对二进制,相同的为0,不同的为1 public static void main(String[] args) { System.out.println("2^3运算的结果是 :"+(2^3)); //打印的结果是: 2^3运算的结果是 :1 } 2 =======>0010 3 =======>0011 2^3就为0001,结果就是1 2.&(与运算) 针对二进制,只要有一个为0,就为0 还是上述的例子 public static void main(String[] args) { System.out.println("2&3运算的结果是 :"+(2&3)); //打印的结果是: 2&3运算的结果是 :2 } 3.<<(向左位移) 针对二进制,转换成二进制后向左移动3位,后面用0补齐 public static void main(String[] args) { System.out.println("2<<3运算的结果是 :"+(2<<3)); //打印的结果是: 2<<3运算的结果是 :16 } 4.>>(向右位移) 针对二进制,转换成二进制后向右移动3位, public static void main(String[] args) { System.out.println("2>>3运算的结果是 :"+(2>>3)); //打印的结果是:

掌握树状数组~彻底入门

我怕爱的太早我们不能终老 提交于 2020-01-09 08:54:39
前言 最近初学树状数组,原理还不是太理解,等自己什么时候完全理解了再自己总结一番。 掌握树状数组~彻底入门 先贴一下树状数组的模板代码: int lowbit(int i) { return i & -i;//或者是return i-(i&(i-1));表示求数组下标二进制的非0最低位所表示的值 } void update(int i,int val)//单点更新 { while(i<=maxn) { c[i]+=val; i+=lowbit(i);//由叶子节点向上更新树状数组C,从左往右更新 } } int sum(int i)//求区间[1,i]内所有元素的和 { int ret=0; while(i>0) { ret+=c[i];//从右往左累加求和 i-=lowbit(i); } return ret; } 模板中最常见的三个函数:①取数组下标二进制非0最低位所表示的值;②单点更新;③区间查询。树状数组,顾名思义是树状的数组,我们首先引入二叉树,叶子节点代表A[1]~A[8]。 现在变形一下: 现在定义每一列的顶端节点C数组(其实C数组就是树状数组),如图: C[i]代表子树的叶子节点的权值之和,如图可以知道: C[1]=A[1]; C[2]=A[1]+A[2]; C[3]=A[3]; C[4]=A[1]+A[2]+A[3]+A[4]; C[5]=A[5]; C[6]=A

Qt开发中文显示乱码

折月煮酒 提交于 2020-01-07 16:04:39
Qt开发中文显示乱码 来源 https://www.jianshu.com/p/ed269df8104d 参考 https://blog.csdn.net/J_H_C/article/details/93882284 为什么会出现乱码 首先,我们需要有的概念是 乱码的问题是由编码和解码方式引起的 。涉及到编码方式的地方有3个: 源码字符集 执行字符集 运行环境字符集 源码字符集(the source character set):源码文件时使用何种编码格式保存的。 执行字符集(the execution character):可执行程序内保存的是何种编码(程序执行时内存中字符串编码) gcc 运行字符集设置参数 -finput-charset=charset //设置源码字符集为charset -fexec-charset=charset //设置执行字符集为charset -fwide-exec-charset=charset //设置宽字符串的执行字符集为charset msvc 运行字符集设置参数 -execution-charset:utf-8 // 指明程序执行时使用UTF-8字符集 -source-charset:utf-8 // 指明源码文件的编码为UTF-8字符集 源码字符集确切的说是编译器认为源码文件的编码方式,执行字符集是可执行程序采用的编码方式

mysql 日志文件(转于我的同学和大家共同分享)

穿精又带淫゛_ 提交于 2020-01-07 08:17:34
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 由于最近碰到一个日志清理的问题,所以就花时间写了这篇文章,严格来说只是学习笔记。 1.通用日志文件 默认安装情况下不开启,即不会生成这个文件,需要手工开启,可直接在命令行中设置:set global general_log = ON。即时生效。重启MySQL服务后,会关闭,需重新启动。 也可在配置文件my.ini中设置:general_log=on。这样每次启动MySQL服务都会自动启动。 这样MySQL就会在data目录下创建一个和你计算机同名的日志文件:计算机名-PC.log。 以后你对MySQL做的任何操作,都会被记录到这个日志文件中。 2.二进制日志文件 默认安装情况下不开启,即不会生成这个文件,需要手工开启,在配置文件my.ini中的[mysqld]后面加入:log_bin=binary_log。这里的binary_log为二进制文件名。 这样MySQL就会在data目录下创建如下两个文件:binary_log.000001和binary_log.index。 以后对MySQL表做的任何更新,都会被记录里到这个日志文件中。 当在data目录下手工删除了某些二进制日志文件时,一定要同时删除binary_log.index里面的对应记录,否则mysql服务将无法启动。 可在命令行中通过 show

汉明编码的校验,个人学习笔记

本小妞迷上赌 提交于 2020-01-06 20:40:06
根据汉明编码的纠正 首先了解汉明码的组成,设欲检测的二进制代码为n位,需要添加k位检测位,组成n+k位的代码 他们的关系是 2^k>=n+k+1 代码长度n与检测位数k的关系 n k 1 2 2~4 3 5~11 4 12~26 5 确定K位后,设n+k位二进制代码从左向右的顺序依次位1,2,3,4,5,……n+k位 (1)将k位的检测位记作Ci(i=1,2,4,8,16……),分别安插在n+k位二进制代码的1,2,4,8位上。 (2)C1即二进制代码中第一位为1的,如1,11,101,111,1001,1011等(1,3,5,7,9,……) C2即二进制代码中第二位为1的,如10,11,110,111,1010,1011等(2,3,6,7,10,11) C4即二进制代码中第三位为1的,如100,101,111,1100,1101等(4,5,6,7,12,……) C8即二进制代码中第四位为1的,如1000,1001,1011,1111等(8,9,10,11,12,……) (3) 实际C1就是安排在n+k位二进制代码的第1位上,C2是第2位,C4是第4位,C8是第8位,以此类推 在配奇/配偶时,C1=第1,3,5,7,9位相加 C2=第2,3,5,7,9位相加以此类推 安插顺序如下,例如欲检测的代码为4位,则需要安插3位检测位,计算方法为2^k>=n+k+1, 即2 ^k>=k+4

Java基础语法(一)---关键字、常量、变量、运算符

☆樱花仙子☆ 提交于 2020-01-05 22:14:31
一、关键字 定义:被Java赋予了特殊含义的单词。 特点:体现上都是英文小写。 1、 用于定义数据类型的关键字 基本数据类型: 整数类型:byte short int long 浮点类型:float double 字符类型:char 布尔型:boolean 引用数据类型: class(类) interface(接口) void用于函数上表示无返回值类型 2、用于定义数据类型值的关键字 true(真) false(假) null(空) 3、 用于定义流程控制的关键字 判断:if else switch case default 循环:for while do 继续循环:continue 结束循环或选择结构:break 返回:return 4、 用于定义访问权限修饰符的关键字 private(私有的) protected(受保护的) public(公有的) 5、 用于定义类、函数,变量修饰符的关键字 abstract(抽象的) final(最终的) static(静态的) synchronized(同步的) enum(枚举) 6、用于定义类与类之间关系的关键字 extends(继承) implements(实现) 7、 用于定义建立实例及引用实例,判断实例的关键字 new(建立实例) this(当前引用) super(父类引用) instanceof(判断对象类型) 8、

二进制枚举的一些思考和例题

淺唱寂寞╮ 提交于 2020-01-03 20:08:33
二进制枚举 固定模板 for (int i=0;i<(1<<n);i++) for(int j=0;j<n;j++) if(i&(1<<j)) 这样就把所有数遍历了一遍,用1<<去和i与就可以去选其中的某几个数 最后去应用这个方法解决一些问题 我觉得之所以用二进制思想去解决问题是因为二进制表示的一些巧妙的地方,这得慢慢 结合题目去悟 前提是得先学会二进制的一些基本运算法则 算数位运算: 1、与(&): 对于指定的两个数A=60(0011 1100) B=13(0000 1101) 执行一下操作 A&B=12(0000 1100) 就是对二进制每一位进行了一次与操作,同为1,结果为1,否则为0 其实说白了就是只要有0就是0; 2、或(|): 对于指定的两个数A=60(0011 1100) B=13(0000 1101) 执行一下操作 A|B=61(0011 1101) 就是对二进制每一位进行了一次或操作,同为0,结果为0,否则为1 说白了就是有1就为1; 关于与和或其实可以类比&& || 3、非 按位取反(~): 对于指定的一个数A=60(0011 1100) 执行以下操作 ~A=195(1100 0011) 就是对二进制每一位进行了一次取反操作,若二进制数位0,则变成1,否则变成0. 4、异或运算 a,b值不同为1(就是两个数一个1 一个0) 相同时为0; 在c/c++中异或用

[文档].艾米电子 - 二进制计数器及其变体,Verilog

*爱你&永不变心* 提交于 2020-01-03 02:41:50
对读者的假设 已经掌握: 可编程逻辑基础 Verilog HDL基础 使用Verilog设计的Quartus II入门指南 使用Verilog设计的ModelSIm入门指南 内容 1 free-running二进制计数器 自由运行二进制计数器就是按照二进制形式不断循环计数。例如,4位的二进制计数器的从0000数到1111,然后翻回来重新数。 代码1 free-runing二进制计数器 module free_run_bin_counter #(parameter N=8) ( // global clock and asyn reset input clk, input rst_n, // counter interface output max_tick, output [N-1:0] q ); // signal declaration reg [N-1:0] r_reg; wire [N-1:0] r_next; // body // register always@(posedge clk, negedge rst_n) if(!rst_n) r_reg <= 0; // {N{1'b0}} else r_reg <= r_next; // next-state logic assign r_next = r_reg + 1'b1; //output logic