二进制

学习C++:读写二进制文件

社会主义新天地 提交于 2020-02-14 21:03:24
上一篇博客https://blog.csdn.net/wjinjie/article/details/104303770中,已经总结了处理普通文本文件的读写流程。 处理二进制文件的流程与上一篇介绍的流程差别不大,不同的是在打开文件时使用ios_base::binary标志。通常使用ofstream::write和ifstream::read来读写二进制文件。 首先补充函数open()打开文件流的各种模式: ios_base::binary 创建二进制文件 ios_base::in 以只读方式打开文件 ios_base::out 以只写方式打开文件 ios_base::trunc 重新创建一个文件(即时指定的文件已经存在) ios_base::app 附加到现有文件末尾,而不是覆盖它 ios_base::ate 切换到文件末尾,但可在文件的任何地方写入数据 以下程序将一个结构写入二进制文件并使用该文件的内容创建一个结构: # include <fstream> # include <iomanip> # include <string> # include <iostream> using namespace std ; struct Human { Human ( ) { } ; Human ( const char * inName , int inAge , const

力扣一日一练(35)——位1的个数

别等时光非礼了梦想. 提交于 2020-02-14 18:36:15
题目:位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 示例 示例 1: 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。 示例 2: 输入:00000000000000000000000010000000 输出:1 解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。 示例 3: 输入:11111111111111111111111111111101 输出:31 解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。 使用JavaScript语言 /** * @param {number} n - a positive

mysql 文件

强颜欢笑 提交于 2020-02-14 17:44:55
慢查询日志 log_query_time 查询时间超过这个值则会出现在慢查询日志中,默认值是10 log_slow_queries 是否开启慢查询 log_queries_not_using_indexes ,如果运行的sql语句没有使用索引,则mysql数据库同样会将这条sql语句记录到慢查询日志文件 如果用户希望得到执行时间最长的10条sql语句 mysqldumpslow -s at -n 10 david.log 二进制日志 max_binlog_size 指定了单个二进制日志文件的最大值,默认为1g binlog_cache_size默认大小为32k,此参数是基于会话的,也就是说,当一个线程开始一个事务时,mysql会自动分配一个大小为binlog_cache_size的缓存 通过show global status命令查看binlog_cache_use,binlog_cache_disk_use的状态,可以判断当前binlog_cache_size设置是否合适。binlog_cache_use记录了使用缓冲写二进制日志的次数,binlog_cache_disk_use记录了使用临时文件写二进制日志的次数。 log-slave-update,如果当前数据库是复制中的slave角色,则它不会将从master取得并执行的二进制日志写入自己的二进制日志文件中去,如果需要写入

MYSQL高可用——MHA(概述与安装)

陌路散爱 提交于 2020-02-13 20:18:43
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。 github地址: https://github.com/yoshinorim **该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。**MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。 ​ 在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问

C语言程序设计100例之(26):二进制数中1的个数

有些话、适合烂在心里 提交于 2020-02-13 10:34:53
例26 二进制数中1的个数 问题描述 如果一个正整数m表示成二进制,它的位数为n(不包含前导0),称它为一个n位二进制数。所有的n位二进制数中,1的总个数是多少呢? 例如,3位二进制数总共有4个,分别是4(100)、5(101)、6(110)、7(111),它们中1的个数一共是1+2+2+3=8,所以所有3位二进制数中,1的总个数为8。 输入格式 一个整数T,表示输入数据的组数,接下来有T行,每行包含一个正整数 n(1<=n<=20)。 输出格式 对于每个n ,在一行内输出n位二进制数中1的总个数。 输入样例 3 1 2 3 输出样例 1 3 8 (1)编程思路1。 对于输入的n,n位二进制数m是位数为n并且首位为1的二进制数,且满足:     2 n-1 ≤ n位二进制数m < 2 n   因为首位为1,n位二进制数的个数就是n-1位的0和1的组合数,即2 n-1 个。   第1位必须为1,所以第1位的1的个数为2 n-1 个。   其他n-1位,总位数为(n-1)* 2 n-1 。其中0和1的个数是一半对一半,所以1的个数为(n-1)* 2 n-1 /2。   合计1的位数为:2 n-1 +(n-1)* 2 n-1 /2。 因此,n位二进制数中1的个数直接用上式计算出来。计算时,用移位运算来计算2的n次方是一种快速的计算方法。 即n位二进制数中1的个数为 :1<<(n-1)+

【Java基础】15、负数的二进制表示方法

风格不统一 提交于 2020-02-13 09:42:00
在计算机中,负数以其正值的补码形式表达 。 什么叫补码呢?这得从原码,反码说起。   原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。 比如 00000000 00000000 00000000 00000101 是 5的 原码。   反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。 取反操作指:原为1,得0;原为0,得1。(1变0; 0变1) 比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。 称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。 反码是相互的,所以也可称: 11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。   补码:反码加1称为补码。 也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。 比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。 那么,补码为: 11111111

负数的二进制表示方法(正数:原码、负数:补码)

筅森魡賤 提交于 2020-02-13 09:41:39
原文连接:http://blog.csdn.net/diandianxiyu_geek/article/details/44098121 一:表示法: 1、正数5的表示法 假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 00000101 5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。 2、负数-5的表示法 现在想知道,-5在计算机中如何表示?在计算机中,负数以原码的补码形式表达。 二、概念: 1、原码: 一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。 比如 00000000 00000000 00000000 00000101 是 5的 原码。 10000000 00000000 00000000 00000101 是 -5的 原码。 备注: 比如byte类型,用2^8来表示无符号整数的话,是0 - 255了;如果有符号, 最高位表示符号,0为正,1为负,那么,正常的理解就是 -127 至 +127 了.这就是原码了,值得一提的是,原码的弱点,有2个0,即+0和-0(10000000和00000000);还有就是,进行异号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作

负数在计算机中的表示方法

ぃ、小莉子 提交于 2020-02-13 09:41:24
转载于: http://www.cnblogs.com/junsky/archive/2009/08/06/1540727.html 对负数的二进制表示有些遗忘,在网上找了一下资料,贴出来已备再次遗忘: 假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 00000101 5转换成二制是101,不过int类型的数占用4字节( 32位 ),所以前面 填了一堆0 。 现在想知道,-5在计算机中如何表示?   在计算机中,负数以其绝对值的补码形式表达 。 什么叫补码呢?这得从原码,反码说起。   原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。 比如 00000000 00000000 00000000 00000101 是 5的 原码。   反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。 取反操作指:原为1,得0;原为0,得1。(1变0; 0变1) 比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。 称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。 反码是相互的

负数的二进制表示方式

坚强是说给别人听的谎言 提交于 2020-02-13 09:40:57
我们已经知道计算机中,所有数据最终都是使用二进制数表达。 我们也已经学会如何将一个10进制数如何转换为二进制数以及如何将如何将一个16进制数如何转换为二进制数,详见下图。 不过,我们仍然没有学习一个负数如何用二进制表达。 比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 00000101 5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。 现在想知道,-5在计算机中如何表示? 在计算机中,负数以其正值的补码形式表达 。 什么叫补码呢?这得从原码,反码说起。 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。 比如 00000000 00000000 00000000 00000101 是 5的 原码。 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。 取反操作指:原为1,得0;原为0,得1。(1变0; 0变1) 比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。 称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。 反码是相互的

原码,反码与补码理解

故事扮演 提交于 2020-02-13 09:40:21
原码,反码与补码理解 1. 写作目的 平时学习总结的学习笔记,方便自己理解加深印象。同时希望可以帮到正在学习这方面知识的同学,可以相互学习。新手上路请多关照,如果问题还请不吝赐教。 2. 前置知识 字节 → 位 → 二进制数 计算机存储数据使用字节进行存储,机器有32位,64位为一个最小存储单元,1个字节为8位,那么32位机器一个存储单元存储4个字节,64位机器一个存储单元为8个字节。计算机使用二进制来表示数据,1位代表一个二进制数,要么是1,要么是0。 3. 引出原码 既然是数据,那么就有大小,就需要对数值进行运算。我们用真值来表示数据的大小,正负。 十进制:+8 = 二进制:+1000 十进制:-6 = 二进制:-0110 +1000,-0110既是真值,但是计算机在存储数据时没有单独存储数值的正负,而是同样用1,0来存储负,正,那么这就是原码表示。 十进制:+8 = 二进制:01000 十进制:-6 = 二进制:10110 表示是没有问题?但是问题又出现了,那就是如果是同符号运算,我们很好算,如果符号不相同的两个数相加,我们首先要判断哪个数更大,然后相减得到结果,再用大数的符号标注,这样每次算更加麻烦。而且计算机没有设计减法运算,只有加法运算,因为加法运算更加快速。我们如何来实现2个数的减法。下面就是加法转减法的思路: 4. 同余模数 以表盘为例:表盘有12个刻度