二进制代码

二进制中1的个数

陌路散爱 提交于 2020-02-22 18:06:33
题目描述   输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解题思路   对于n来说,n&(n-1)能够将n的二进制表示中最右面的1变为0,比如n的二进制表示为xxx100,n-1的二进制表示为xxx011,显然进行一个&操作之后,最右面的1已经变为0,那么有多少次操作n可以变为0,n中就含有多少个1。 实现代码 class Solution { public : int NumberOf1 ( int n ) { int cnt = 0 ; while ( n ) { cnt ++ ; n & = n - 1 ; } return cnt ; } } ; 来源: CSDN 作者: qq_41922018 链接: https://blog.csdn.net/qq_41922018/article/details/104444959

[LeetCode] 868. 二进制间距

心已入冬 提交于 2020-02-21 02:40:43
1 题目描述 给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离。 如果没有两个连续的 1,返回 0 。 示例 1: 输入:22 输出:2 解释: 22 的二进制是 0b10110 。 在 22 的二进制表示中,有三个 1,组成两对连续的 1 。 第一对连续的 1 中,两个 1 之间的距离为 2 。 第二对连续的 1 中,两个 1 之间的距离为 1 。 答案取两个距离之中最大的,也就是 2 。 示例 2: 输入:5 输出:2 解释: 5 的二进制是 0b101 。 示例 3: 输入:6 输出:1 解释: 6 的二进制是 0b110 。 示例 4: 输入:8 输出:0 解释: 8 的二进制是 0b1000 。 在 8 的二进制表示中没有连续的 1,所以返回 0 。 提示: 1 <= N <= 10^9 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-gap 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 2 解题思路 解决方法:存储索引 思路 由于我们想要检查数字 N 的二进制表示法中连续的 1 之间的距离,让我们先记录下该二进制表示中每个 1 的索引。例如,如果 N = 22 = 0b10110,那么我们将记录 A = [1, 2, 4]

位运算

别来无恙 提交于 2020-02-20 10:23:11
1.位运算概述 从现代计算机中所有的数据二进制的形式存储在设备中。即0、1两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。 口说无凭,举一个简单的例子来看下CPU是如何进行计算的,比如这行代码: int a = 35; int b = 47; int c = a + b; 计算两个数的和,因为在计算机中都是以二进制来进行运算,所以上面我们所给的int变量会在机器内部先转换为二进制在进行相加: 35: 0 0 1 0 0 0 1 1 47: 0 0 1 0 1 1 1 1 ———————————————————— 82: 0 1 0 1 0 0 1 0 所以,相比在代码中直接使用(+、-、*、/)运算符,合理的运用位运算更能显著提高代码在机器上的执行效率。 2.位运算概览[td] 符号 描述 运算规则 & 与 两个位都为1时,结果才为1 | 或 两个位都为0时,结果才为0 ^ 异或 两个位相同为0,相异为1 ~ 取反 0变1,1变0 << 左移 各二进位全部左移若干位,高位丢弃,低位补0 >> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) 3.按位与运算符(&) # 定义:参加运算的两个数据,按二进制位进行“与”运算。 运算规则: 0&0=0 0

python字符串编码

浪尽此生 提交于 2020-02-18 07:03:15
python 默认编码   python 2.x 默认的字符编码是 ASCII ,默认的文件编码也是 ASCII 。   python 3.x 默认的字符编码是 unicode ,默认的文件编码是 utf-8 。 中文乱码 问题   无论以什么编码在内存里显示字符,存到硬盘上都是 二 进制,所以编码不对,程序就会出错。   常见编码有 ascii 编码(美国), GBK 编码(中国), shift_JIS 编码(日本 ), unicode (统一编码)等。   需 要注意的是,存到硬盘上时是以何种编码存的,再从硬盘上读出来时,就必须以何种编码读,要不然就 会出现乱码问题 。   常见的编码错误的原因有 如下,出现乱码时,按照编码之前的关系,挨个排错就能解决问题。      python 解释器的默认编码 ;      Terminal 使用的编码 ;      python 源文件文件编码 ;     操作系统的语言设置 。   Python 支持中文的编码: utf-8 、 gbk 和 gb2312 。 uft-8 为 国际通用 , 常用有数据库、编写代码 。 gbk 如 windows 的 cmd 使用 。 编码转换   如果想要中国的软件可以正常的在美国人的电脑上实现,有下面两种方法:    让美国人的电脑都装上 gbk 编码    让你的软件编码以 utf-8 编码   

文件处理方法-Python

十年热恋 提交于 2020-02-18 05:41:32
文章目录 1. 文件说明 1.1 文本文件 1.2 二进制文件 2. 文件处理的一般步骤 2.1 文件的打开 2.2 文件的关闭 2.3 文件内容的读取 2.4 数据的文件写入 3. 总结 1. 文件说明 文件是存储在存储器上的数据序列,在计算机中,所有文件都是以二进制的方式进行存储的,而文件的展示形式一般分为两种: 文本形式 和 二进制形式 。 1.1 文本文件 1.由单一特定编码组成的文件,如 utf-8 编码。 1.2 二进制文件 1.直接由比特0和1组成的文件,没有统一字符编码。 在二进制文件中,0和1一般根据 预定义 的格式进行了结构组织,这种结构也就是文件的格式,结构的不同也就代表了文件格式的不同。例如 .png , .avi 等文件。 无论是文本文件还是二进制文件,在计算机中都是以二进制方式进行存储的,而有统一编码的我们称其为文本文件,没有统一编码的我们称其为二进制文件。不过对于任何类型的文件,我们都可以用二进制的方法进行打开。 2. 文件处理的一般步骤 当我们拿到一个文件时,处理步骤一般分为三步: 1.打开 2.操作 3.关闭 其中第一步打开文件是必不可少的,不打开文件是无法对其进行相关操作的(当然,如果你只是想要进行像删除它之类的操作当我没说),第二步操作是我们处理文件的核心,最后关闭它是为了防止它继续占用我们的内存。 打开文件和关闭文件一般来说都只需要一行代码:

python字符编码-文件操作

浪尽此生 提交于 2020-02-17 23:25:49
字符编码 字符编码历史及发展 为什么有字符编码 ''' 原因:人们想要将数据存入计算机 计算机的能存储的信息都是二进制的数据 内存是基于电工作的,而电信号只有高低频两种,就用01来表示高低电频,所以计算机里存储的数据都是0101这样的二进制数据 ''' 各种编码表/标准 的由来 """ 基于上述原因与情况 人们输入的都是我们自己能看懂的语言、字符, 而计算机里存储的却是二进制数据,这样计算机不能读懂了 所以在保存数据的时候有一个转换过程,要有一个对应关系将我们输入的字符转换成计算机能够存储的二进制数据 人输入的字符 >> 对应关系转换(字符编码表)>> 二进制数据 A 0100 0001 B 0100 0010 后来美国发明了ASCII码表,用八位二进制来表示一个英文字符 其实所有的英文字符 + 符合,最多也就在125位左右,用七位二进制就够了,采用八进制是给其他语言做了预留 """  补充: ''' 八位二进制也叫 8bit ---> 0000 0000 常见单位与转换: 8bit = 1Bytes 1024Bytes = 1KB 1024KB = 1MB 1024MB = 1GB 1024GB = 1TB 1024TB = 1PB ''' 各国各类编码的出现 """ 看到美国人有字符编码了,我们中国人也要用计算机,但ASCII码又没有中文的对应关系,于是乎就有国人发明了国标码

java:判断二进制数据中第n位是否为1

牧云@^-^@ 提交于 2020-02-17 02:19:53
一、进制转换 编程用十进制,十进制转换为二进制、八进制、十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: '0o27' In [137]: hex(23) Out[137]: '0x17' 也可以直接反向获取十进制 In [146]: 0b10111 Out[146]: 23 In [147]: 0o27 Out[147]: 23 In [148]: 0x17 Out[148]: 23 也可以用int函数来转换 In [149]: int('0b10111', 2) Out[149]: 23 In [150]: int('0o27', 8) Out[150]: 23 In [151]: int('0x17', 16) Out[151]: 23 二、位运算 按位异或的3个特点: (1) 0^0=0,0^1=1 0异或任何数=任何数 (2) 1^0=1,1^1=0 1异或任何数-任何数取反 (3) 任何数异或自己=把自己置0 按位异或的几个常见用途: (1) 使某些特定的位翻转 例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。       10100001^00000110 = 10100111 (2) 实现两个值的交换,而不必使用临时变量

你真的搞清位运算了么?以Java为例总结

≯℡__Kan透↙ 提交于 2020-02-16 00:05:43
二进制位运算是最贴近计算机真实运算操作,通过位运算,我们可以高效的完成各种基础运算(加减乘除取余等),我们还可以使用位运算巧妙的完成原本很复杂的工作,真正理解计算机,我们才能更好的使用计算机。我将通过基础理解开始,讲解到Java中的一些实际应用。本场Chat中,将学到一下内容 •对原码、反码、补码等基础进行重拾 •与或异或移位等正负数运算细节 •正负数位运算的操作 写在前面 二进制位运算是最贴近计算机真实运算操作,通过位运算,我们可以高效的完成各种基础运算(加减乘除取余等),我们还可以使用位运算巧妙的完成原本很复杂的工作,真正理解计算机,我们才能更好的使用计算机。在这一片文章,我将通过基础理解开始,讲解到 Java 中的一些实际应用。 机器数和机器数的真值 一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用机器数的最高位存放符号,正数为 0,负数为 1。举个例子,比如在机器字长为 8 位的情况下(机器字长是指计算机直接处理的二进制数据的位数,它决定了计算机的运算精度,一般是 8 的整数倍,8 位、16 位、32 位、64 位、128 位),十进制中的+3,转换成二进制就是 0000 0011,如果是-3,转换成二进制就是 1000 0011。转换的二进制数 0000 0011 和 1000 0011 就是机器数。 这里我们还需要知道的就是机器数的真值

python基础学习浅学二进制,字符串(bytes,bytearray,string)

╄→гoц情女王★ 提交于 2020-02-15 09:41:39
一,二进制 二进制中只有两个可能的数:1和0 二进制中,1个1或0叫一’位’(bit) 8位能表示的最小数是0,8位都是0;最大数是255,8位都是1。 十进制逢十进一;二进制逢二进一,记零 1.二进制换十进制: 从右往左:1,2,4,8…分别从右往左对应2的n次方。如2的0次方,2的1次方,2的2次方… 从左往右分别对应相乘再相加即为十进制。 十进制换二进制: 如:25 一直除以2,每次的余数倒序读即此十进制的二进制。 2.二进制里,1kb=2^10=1024个字节 1000也是千字节(kb)的正确单位,1000和1024都对 kb mb gb 分别对应 千字节 兆字节 千兆字节 3.计算机中正数和负数表示方式 0是正,1是负(1开头代表负数,0开头代表正数)。 总共是32位的二进制,其中一位表示正数负数,剩下31位表示数字。 不够用,引入64位使用,第一位表示正负,剩余63位表示数字。 用科学计数法表示十进制,处理非整数。 value=sign exponent sighificand 符号位 指数值 有效位数 举例:114.9可以写成0.1149* 10 ^ 3 。1149叫做有效位数,1代表指数。 在32位浮点数中,第一位表示数字正负。后面八位存指数,剩下23位存有效数字 4.把字符串转换为字节的方法:ASCII,Unicode,UTF-8,gbk(中文编码格式)

剑指offer-11 二进制中1的个数

左心房为你撑大大i 提交于 2020-02-12 23:07:31
剑指offer-11 二进制中1的个数 题目描述 题目类别 解题思路 具体实现 题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 题目类别 二进制计算 解题思路 代码鲁棒性;输入是int 可能正数,负数,零; 首先思路是n & 1,然后按位右移n,但是n可能为负数就造成死循环 其次思路是,每次左移1,在分别与n作与运算,但是int为32位因此要判断32次 最后采用(n+1)& n 的方式,每次去掉最右边1.达到循环1个数次运算 具体实现 class Solution { public : int NumberOf1 ( int n ) { int count = 0 ; while ( n ) { count ++ ; n = ( n - 1 ) & n ; } return count ; } } ; 来源: CSDN 作者: 一只小鸟er 链接: https://blog.csdn.net/qq_36400206/article/details/104284371