二进制代码

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

馋奶兔 提交于 2020-02-12 19:44:59
https://github.com/PhillipHuang2017/SwordOffer 11.二进制中1的个数 题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解题思路 负数用补码表示,所以运算方法和正数一样,无需做特殊考虑。 这里用到了一个很巧妙的运算方式,即 n & (n - 1) ,这个运算表示将最右边的1变成0,解释见下面 因为 n-1 表示将 n 最右边的1变成0,然后把那一位后面的0全都变成1,前面不变,因此如果用 n 和 n-1 做与运算的话, n 原本最右边的1就变成了0 ,一直重复上面的过程直到 n 变为全0 。 如果用Python的话,由于python的数据是动态的,可以认为是无限长的,存储的形式又是补码,因此负数就会有非常多的1,会导致无限循环,因此需要先用 n = n & 0xffffffff 代码把数据截取为32位,再进行操作。 代码 C++ class Solution { public : int NumberOf1 ( int n ) { int count = 0 ; while ( n ) { count ++ ; n = n & ( n - 1 ) ; } return count ; } } ; Python方法1 class Solution : def NumberOf1 ( self , n ) : #

蓝桥杯--算法训练 二进制数数(Java解法)

六眼飞鱼酱① 提交于 2020-02-12 15:31:30
题目 问题描述 给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。 如5的二进制为101,包含2个“1”。 输入格式 第一行包含2个数L,R 输出格式 一个数S,表示[L,R]区间内的所有数在二进制下包含的“1”的个数之和。 样例输入 2 3 样例输出 3 数据规模和约定 L<=R<=100000; 问题分析 这是个很简单的题目,统计某个数字二进制形式中1的个数,这里有个技巧,设该数为x,则x&(x-1)就会消掉x二进制数的一个1。 代码实现(Java) 主函数用于输入和输出,定义getBitNum函数用于处理数据,完整程序如下: import java . util . * ; public class Main { public static void main ( String [ ] args ) { int L , R ; Scanner scanner = new Scanner ( System . in ) ; L = scanner . nextInt ( ) ; R = scanner . nextInt ( ) ; if ( L > 100000 || R > 100000 || L > R ) return ; int sum = 0 ; /*统计区间内的数值*/ for ( int i = L ; i <= R ; i ++ ) {

python基础知识练习题(一)

依然范特西╮ 提交于 2020-02-12 10:48:29
1、执行Python脚本的两种方式:WIN+R,cmd,命令行窗口输入:python 进入python模式输入命令行直接执行命令;编写以.py结尾的文件,写入命令行,然后运行python.exe打开后缀为.py的文件。 2、简述位、字节的关系:位,是指机器码(二进制)中存储时候的所占的位数;字节,是指编程过程中一个英文字母、数字、汉字或者符号所占的单位成为字节。1字节=1byte=8位=8bit 3、简述ASCII、unicode、utf-8和gbk的关系:ASCII码是英文字母和美国常用特殊字符所对应的二进制机器码的对应表,一个字节用8位二进制表示;Unicode则是所有国家的语言和所有特殊字符所对应二进制机器码的对应表,一个字节用32位二进制表示;utf-8也是所有国家的语言和所有特殊字符所对应二进制机器码的对应表,一个字节字少用24位二进制表示,前面为0的位则自动省略;gbk码是汉字和中国常用特殊字符所对应的二进制机器码的对应表,一个字节用16位二进制表示。Unicode包括所有ASCII、utf-8和gbk,utf-8包括ASCII和gbk。 4、“李杰”用utf-8和gbk编码所占的位数:6~8位,4位 5、Python单行注释和多行注释用:#,3个英文单引号或者3个英文单引号 6、变量注意事项:只能是英文、数字或下划线(_)组成,不能纯数字

Python-基础-day6

孤人 提交于 2020-02-12 05:29:11
1、二进制 前言:计算机一共就能做两件事:计算和通信 2、字符编码 生活中的数字要想让计算机理解就必须转换成二进制。十进制到二进制的转换只能解决计算机理解数字的问题,那么文字要怎么让计算机理解呢? 于是我们就选择了一种方式,既然数字可以转换成十进制,我们只要想办法吧文字,转换成数字,这样文字不就可以表示成二进制了么? 那么问题来了:怎么把文字转换成数字呢?就是强制转换 我们自己强行约定了一个表,把文字和数字对应上,这张表就相当于翻译,我们可以拿着一个数字来对比对应表找到相应的文字,反之亦然。 ASCII码 我们先来看一张图片,在了解ascii码 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于 拉丁字母 的一套电脑编码系统,主要用于显示现代 英语 和其他 西欧 语言。它是现今最通用的单字节编码系统,并等同于 国际 标准ISO/IEC 646。 由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为 ASCII 编码,比如大写字母 A 的编码是 65 ,小写字母 z 的编码是 122 。后128个称为 扩展ASCII 码。 那现在我们就知道了上面的字母符号和数字对应的表是早就存在的。那么根据现在有的一些十进制

字符编码笔记:ASCII,Unicode和UTF-8

。_饼干妹妹 提交于 2020-02-12 05:27:57
这家伙说的通俗易懂,只是在谈到UTF-8 “它可以使用1~4个字节表示一个符号”有问题。 作者:阮一峰 来源:阮一峰的网络日志 下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。 ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。 2、非ASCII编码 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是

字符编码ASCII, Unicode和UTF-8

房东的猫 提交于 2020-02-12 05:26:50
字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。 ASCII码一共规定了128个字符的编码,比如空格”SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。 2、非ASCII编码 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。 但是,这里又出现了新的问题。不同的国家有不同的字母,因此

Unicode 和 UTF-8 之间的关系

可紊 提交于 2020-02-12 05:19:31
今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料。 这个问题比我想象的复杂,午饭后一直看到晚上9点,才算初步搞清楚。 下面就是我的笔记,主要用来整理自己的思路。我尽量写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。 一、ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有 0 和 1 两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从 00000000 到 11111111 。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。 ASCII 码一共规定了128个字符的编码,比如空格 SPACE 是32(二进制 00100000 ),大写的字母 A 是65(二进制 01000001 )。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为 0 。 二、非 ASCII 编码 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号

进制转换

孤街浪徒 提交于 2020-02-12 03:58:01
进制转换 为什么要学习进制 计算机只认识二进制,也就是0和1,为了更好学习计算机,首先就要深入理解什么是进制。 当初最早的程序员都是靠二进制写程序的,就是一堆人敲键盘的0和1来写程序。 后来过渡到十六进制,大家都在敲0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f来写程序。 二进制使用起来很不方便, 16进制或8进制可以解决这个问题,因为,进制越大,数的表达长度也就越短。 为什么偏偏是16或8进制,而不其它的? 2、8、16,分别是2的1次方、3次方、4次方。 这一点使得三种进制之间可以非常直接地互相转换。 8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。 可以明显地看到二进制只能写2个数,而十六进制可以写16个数,这大大地提高了编程的效率。 软件在编译器里是2进制的,在编辑器里是十六进制的,我们写的程序被编译器从十六进制转换成了二进制,多么牛逼啊! 不同进制之间的转换 十进制转二进制 首先从我们最熟悉的十进制和计算机最喜欢的二进制之间的转换开始。 给定一个十进制整数,要求转换为二进制。 首先要理解十进制转换为二进制的流程。 高中的时候就应该已经接触过了,总结起来一句话就是除2取余。 假设给定一个数7: 1.7 / 2 = 3......1 2.3 / 2 = 1......1 3.1 / 2 = 0......1 所以,十进制7 = 二进制111

从零开始学java(12)

与世无争的帅哥 提交于 2020-02-11 23:38:25
Day2 今天了解一下一些常用的命令与基础知识,并且学会使用IDE(Integrated Development Environment集成开发环境),以eclipse为例。 1.DOS常见的命令 1 dir 无参数:查看当前所在目录的文件和文件夹。 /s:查看当前目录及其所有子目录的文件和文件夹。 /a:查看包括隐含文件的所有文件。 /ah:只显示出隐含文件。 /w:以紧凑方式(一行显示5个文件)显示文件和文件夹。 /p:以分页方式(显示一页之后会自动暂停)显示。 |more:前面那个符号是“\”上面的那个,叫做重定向符号,就是把一个命令的结果输出为另外一个命令的参数。more也是一个命令,dir /w |more 得到的结果和dir /w /p的结果是一样的。 其他的参数大家可以用:dir/?查看。 2 cd cd 目录名:进入特定的目录。如果看到有个目录显示为:abcdef ghi 就 输入:cd abcdef.ghi进入该目录。 cd\ 退回到根目录。 cd…退回到上一级目录。 3 md rd md 目录名:建立特定的文件夹。 (dos下面习惯叫目录,win下面习惯叫文件夹。) rd 目录名:删除特定的文件夹。 4 cls 清除屏幕。 清除屏幕上所有的显示内容,只留下CLS命令前的路径 5 copy copy 路径\文件名 路径\文件名 :把一个文件拷贝到另一个地方。 6

从零开始学java(12)

拜拜、爱过 提交于 2020-02-11 23:31:46
Day2 今天了解一下一些常用的命令与基础知识,并且学会使用IDE(Integrated Development Environment集成开发环境),以eclipse为例。 1.DOS常见的命令 1 dir 无参数:查看当前所在目录的文件和文件夹。 /s:查看当前目录及其所有子目录的文件和文件夹。 /a:查看包括隐含文件的所有文件。 /ah:只显示出隐含文件。 /w:以紧凑方式(一行显示5个文件)显示文件和文件夹。 /p:以分页方式(显示一页之后会自动暂停)显示。 |more:前面那个符号是“\”上面的那个,叫做重定向符号,就是把一个命令的结果输出为另外一个命令的参数。more也是一个命令,dir /w |more 得到的结果和dir /w /p的结果是一样的。 其他的参数大家可以用:dir/?查看。 2 cd cd 目录名:进入特定的目录。如果看到有个目录显示为:abcdef ghi 就 输入:cd abcdef.ghi进入该目录。 cd\ 退回到根目录。 cd…退回到上一级目录。 3 md rd md 目录名:建立特定的文件夹。 (dos下面习惯叫目录,win下面习惯叫文件夹。) rd 目录名:删除特定的文件夹。 4 cls 清除屏幕。 清除屏幕上所有的显示内容,只留下CLS命令前的路径 5 copy copy 路径\文件名 路径\文件名 :把一个文件拷贝到另一个地方。 6