二进制代码

位运算:二进制中1的个数

醉酒当歌 提交于 2020-01-27 06:37:39
常用操作: 1.求n的第k位数字: n >> k & 1 2.返回n的最后一位1: lowbit(n) = n & ( - n ) lowbit(x)是树状数组里面的常规操作 在二进制中x是原码,-x是反码,-x+1是补码: 题目链接:https://www.acwing.com/problem/content/803/ 给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。 数据范围 1≤n≤100000, 0≤数列中元素的值≤109 输入样例: 5 1 2 3 4 5 输出样例: 1 1 2 1 2 思路 :既然lowbit(x)可以直接返回x二进制最后一个1的位置代表的数,那么我们就可以利用这个性质来得到x的二进制里1的个数了。 代码实现: # include <bits/stdc++.h> using namespace std ; # define lowbit(x) x & (- x) int main ( ) { ios :: sync_with_stdio ( 0 ) ; cin . tie ( 0 ) ; cout . tie ( 0 ) ; int n ; cin >> n ; while ( n -- ) { int x ; cin >> x ; int ans = 0 ; while ( x ) x - = lowbit ( x ) , ans

剑指offer 二进制中1的个数 Python and C++

£可爱£侵袭症+ 提交于 2020-01-27 02:48:29
文章目录 题目描述 思路 做题可能出现的问题 python C++ 题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示 思路 如果整数不等于0,那么该整数的二进制表示中至少有1位是1。 先假设这个数的最右边一位是1,那么该数减去1后,最右边一位变成了0,其他位不变。 再假设最后一位不是1而是0,而最右边的1在第m位,那么该数减去1,第m位变成0,m右边的位变成1,m之前的位不变。 上面两种情况总结,一个整数减去1,都是把最右边的1变成0,如果它后面还有0,那么0变成1。那么我们把一个整数减去1,与该整数做位运算,相当于把最右边的1变成了0,比如1100与1011做位与运算,得到1000。那么一个整数中有多少个1就可以做多少次这样的运算。 做题可能出现的问题 这里遇到的最大问题就是,如果简单的实现代码的话会出现错误,python中首先明确一点就是二进制没有位数的概念,所以也就无法获得负数真实表示方法 n = -3 n = n & 0xffffffff #n=4294967293 bin(n)#查看二进制形式:'0b11111111111111111111111111111101' 获得的最终结果python会认为是一个正数(因为没有位数的概念,所以首位的1并不代表符号位),那么获得 0b11111111111111111111111111111101

Python 进制转换 二进制 八进制 十进制 十六进制

橙三吉。 提交于 2020-01-25 11:06:34
Python 进制转换 二进制 八进制 十进制 十六进制 作者: 方倍工作室 地址: http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不要丢了 全局定义 base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'),ord('A')+6)] 二进制 to 十进制 : int(str,n=10) def bin2dec(string_num): return str(int(string_num, 2)) 十六进制 to 十进制 def hex2dec(string_num): return str(int(string_num.upper(), 16)) 十进制 to 二进制: bin() 复制代码 def dec2bin(string_num): num = int(string_num) mid = [] while True: if num == 0: break num,rem = divmod(num, 2) mid.append(base[rem]) return ''.join([str(x) for x in mid[::-1]]) 复制代码 十进制 to 八进制: oct() 十进制 to 十六进制: hex()

Protobuf 学习手册——编码篇

冷暖自知 提交于 2020-01-25 09:02:31
一、编码规范 Google 官方提供了 Protobuf 的编码规范,通过遵循这些规范,可以使 Protobuf 消息定义及其相应的类保持一致并易于阅读。 Protobuf 编码规范可能随着时间推移而发生变化,对于既有项目,应当保持编码规范的一致性,而不需盲目保持最新的编码规范。但是对于全新项目,应当遵循官方的编码规范,可以 点击这里 查阅官方最新的编码规范。 1.1 Override 一行不超过 80 个字符 两个空格缩进 1.2 文件结构 文件名采用下划线分割命名,形如: lower_snake_case.proto 。所有 .proto 文件应当遵循以下规范: License 头(如果需要的话) 文件综述 Syntax Package Imports (排好序的) File options 一切其他的东西 1.3 Package 包名应当小写,且应当对应于目录结构。例如文件位于 my/package/ 目录, 那么 package 应该是 my.package 。 对于 Java 应用,我们更习惯于使用 option java_package ,很少使用 package。 1.4 Message and field names 对于 messages,使用首字母大写的驼峰命名,例如 SongServerRequest 对于参数名,使用下划线分割命名,例如 song_name

1.位运算----题3 二进制中一的个数

放肆的年华 提交于 2020-01-25 07:04:22
1.原数字不动,1左移,如果将1左移i位与N与后,与1左移后相等,证明i位为1。 package 位运算; import java.util.Scanner; public class numberofone { public static void main(String[] args) { Scanner sc=new Scanner(System.in);//Scanner类可以扫描字符串和基本类型数据进行分析,正则表达式 int N=sc.nextInt();//scanner类的方法用来读取INT型数据 System.out.println(Integer.toBinaryString(N));//输出N的二进制形式 int count=0; for(int i=0;i<32;i++) { if((N& (1<<i))==(1<<i))//将1左移i位与N与后,与1左移后相等,证明i位为1 {count++;} } System.out.println(count); } } 2.数字右移,最后一位与1与运算,与后结果为1,则i位为1。 package 位运算; import java.util.Scanner; public class numberofone { public static void main(String[] args) { Scanner sc

求二进制数中1的个数

我的未来我决定 提交于 2020-01-25 06:49:43
问题描述: 任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4。 若干解决方案: 普通法: 使用移位操作,判末位是否为1;移位的次数为32。 int BitCount(unsigned int n) { unsigned int c =0 ; // 计数器 while (n >0) { if((n &1) ==1) // 当前位是1 ++c ; // 计数器加1 n >>=1 ; // 移位 } return c ; } 快速法: 这个方法我最喜欢,也常用。迭代n=n&(n-1),消除最右边的1,计数。 int BitCount2(unsigned int n) { unsigned int c =0 ; for (c =0; n; ++c) { n &= (n -1) ; // 清除最低位的1 } return c ; } 动态表8bit: 使用查表法。制作包含8bit所有整数对应1的个数的表,然后匹配32位n,匹配4次。 int BitCount3(unsigned int n) { // 建表 unsigned char BitsSetTable256[256] = {0} ; // 初始化表 for (int i =0; i <256; i++) { BitsSetTable256[i] =

C语言文件操作总结

泪湿孤枕 提交于 2020-01-25 01:22:24
文件的打开操作 fopen 打开一个文件,操作文件指针FILE *       文件的关闭操作 fclose 关闭一个文件       文件的读写操作 fgetc 从文件中读取一个字符               fputc 写一个字符到文件中去               fgets 从文件中读取一个字符串               fputs 写一个字符串到文件中去               fprintf 往文件中写格式化数据               fscanf 格式化读取文件中数据               fread 以二进制形式读取文件中的数据               fwrite 以二进制形式写数据到文件中去               getw 以二进制形式读取一个整数               putw 以二进制形式存贮一个整数     文件状态检查函数 feof 文件结束               ferror 文件读/写出错               clearerr 清除文件错误标志               ftell 了解文件指针的当前位置       文件定位函数 rewind 反绕               fseek 随机定位 一、文件打开关闭 (一)文件打开  1. 函数原型 FILE *fopen(char

cout 二进制输出

岁酱吖の 提交于 2020-01-24 10:28:27
1.cout不支持输出二进制,只支持八进制、十进制、十六进制输出,想输出二进制需要用到bitset 2.每次使用oct、dec、hex之后会将默认输出形式分别改为八进制、十进制、十六进制,而使用 bitset输出二进制后则不会改变 代码如下: 1 #include <iostream> 2 #include <vector> 3 #include <ctime> 4 #include <cstdlib> 5 #include <cstring> 6 #include <bitset> 7 8 int main() 9 { 10 using namespace std; 11 12 //二进制输出 13 cout << bitset<sizeof(unsigned long) * 8>(1UL << 27) << endl; 14 15 cout << (1UL << 27) <<endl; 16 17 //八进制输出 18 cout << oct << (1UL << 27) << endl; 19 20 cout << (1UL << 27) <<endl; 21 22 //十六进制输出 23 cout << hex << (1UL << 27) <<endl; 24 25 cout << (1UL << 27) <<endl; 26 27 //十进制输出 28 cout <<

C语言文件操作解析

爷,独闯天下 提交于 2020-01-24 04:12:42
转自:http://www.cnblogs.com/dolphin0520/archive/2011/10/05/2199396.html C语言文件操作解析(一) 在讨论C语言文件操作之前,先了解一下与文件相关的东西。 一.文本文件和二进制文件 文本文件的定义:由若干行字符构成的计算机文件,存在于计算机系统中。文本文件只能存储文件中的有效字符信息,不能存储图像、声音等信息。狭义上的二进制文件则指除开文本文件之外的文件,如图片、DOC文档。 事实上,无论是上面所定义的文本文件还是二进制文件,在计算机中存储都是以二进制的形式存储的,因此其本质并没有区别。所以广义上的二进制文件便指所有的文件。 通常意义下,我们所说的文本文件指只包含了纯文本信息的文件(通过手动编辑完成,包含的都是可显字符),二进制文件特指文件里面存储的是二进制代码的文件。至于为什么在计算机内存储的都是二进制数据,而给我们所呈现的确是文字、图像等信息,这跟计算机硬件组成有关系,因为计算机里面的元件是晶体管,其只有两种稳定的状态,因此二进制的0和1能表示其状态。很多个晶体管的不同状态的组合便呈现给我们不同的信息了。下面以汉字在计算机中的表示为例。 二.汉字在计算机中的表示 用计算机去处理汉字信息,必须对汉字进行编码,变成能被计算机识别的二进制。汉字编码主要有输入码、机内码、字形码三种。分别有不同的作用。 输入码

题目(11)

泪湿孤枕 提交于 2020-01-22 00:23:15
【进制转换7】十六进制和二进制 难度级别: A; 编程语言:不限;运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B 试题描述 十六进制数,是我们在计算机领域广泛应用的数制。它的每一位数制由16种字符表示,即0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。能够依次表示10进制的0至15。 十六进制最大的好处就是能够快速的转化为2进制数值。因为每一位16进制数制可以转化为4位2进制数制。 如,下表: 十六进制 二进制 十六进制 二进制 十六进制 二进制 十六进制 二进制 0 0 1 1 2 10 3 11 4 100 5 101 6 110 7 111 8 1000 9 1001 10 1010 11 1011 12 1100 13 1101 14 1110 15 1111 给你一个多位16进制数制,请你帮我转化为对应的二进制数制。为了简化,如果转化后的二进制数制前面有零也不要省略。 输入 输入中为一个字符串,即为一个16进制数。 输出 输出这个16进制数对应的2进制数。 输入示例 13A3 输出示例 0001001110100011 其他说明 【实战基础衔接(三)】 语言:C\C++ 来源: CSDN 作者: 杰克、第五,盛宴伯爵 链接: https://blog.csdn.net/cool99781/article