二进制

进制转换方法总结——摘自百度

五迷三道 提交于 2020-02-11 09:31:25
进制转换方法总结——摘自百度 先讲一下定义吧,进制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制、八进制、十进制与十六进制,它们之间区别在于数运算时是逢几进一位。比如二进制是逢2进一位,十进制也就是我们常用的0-9是逢10进一位。其他的同理。 好的,接下来就是进制之间的互相转换了。 二进制与十进制之间的转换 1.十进制转二进制 方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除,直到商为0为止。 2.二进制转十进制 方法为:把二进制数按权展开、相加即得十进制数。 二进制与八进制之间的转换 1.八进制转二进制 方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。 2.二进制转八进制 方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。 二进制与十六进制之间的转换 1.十六进制转二进制 方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。 2.二进制转十六进制 方法为:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。 十进制与八进制与十六进制之间的转换 1.十进制转八进制或者十六进制有两种方法 第一

redis web后台存取二进制文件

醉酒当歌 提交于 2020-02-11 06:14:06
简要代码(aioredis): @post('/shop/store_file') async def store_file(request,*,file,fileName): ''' 直接进行二进制存储就行 ''' await redis.execute("HSET", 'admin_doc',fileName, file.file.read()) return @post('/shop/get_file') async def get_file(request,*,fileName): return await redis.execute("HGET", 'admin_doc',fileName) 平台:python3 。测试库:aioredis 使用redis.py一样,这里是使用HSET/HGET进行存取的,使用GET/SET也行。 注意:如果代码中报UnicodeDecodeError错误,可能是你连接数据库的时候指定了encode. 解决方案参考 https://blog.csdn.net/weixin_34096182/article/details/92490558 1、不指定连接的encode。但是当你在同一个项目中存取正常的字符串时,需要手动对查询结果进行解码。 2、修改aioredis中的 connection.py。把L236改成pass

C++中位运算的使用方法

匆匆过客 提交于 2020-02-10 16:02:36
一:简介 1 位逻辑运算符: & (位 “与”) and ^ (位 “异或”) | (位 “或”) or ~ (位 “取反”) 2 移位运算符: << (左移) >> (右移) 优先级 位“与”、位“或”和位“异或”运算符都是双目运算符,其结合性都是从左向右的,优先级高于逻辑运算符,低于比较运算符,且从高到低依次为&、^、| 二:位逻辑运算 & 运算 ———————– -2个都为1-》1 0&1 =0; 0&0 =0; 1&0 =0; 1&1 =1; 00111 & =00100 11100 &运算通常用于二进制取位操作,例如一个数 &1的结果就是取二进制的最末位。 这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数是偶数,最末位为1表示该数为奇数 —————————————————————– | 运算 ————————— 1个为1–》1 0|0=0; 0|1=1; 1|0=1; 1|1=1; 00111 | =11111 11100 | 运算通常用于二进制特定位上的无条件赋值,例如一个数|1的结果就是把二进制最末位强行变为1 如果需要把二进制最末位变成0,对这个数 |1之后再减一就可以了,其实际意义就是把这个数强行变成最近接的偶数 ——————————————————————– ^ 运算 ————————— 不同则为1,相同则为0 //

POJ 3252 Round Numbers (二进制/数位DP)

两盒软妹~` 提交于 2020-02-10 13:06:48
转化为二进制,进行dp, 记录的内容是在pos位上x个0、y个1情况下的有效数字个数, pre消除前导0影响。 # include <cstdio> # include <algorithm> # include <cmath> # include <cstring> # include <queue> # include <vector> # include <map> # include <string> # define lint long long using namespace std ; lint dp [ 33 ] [ 33 ] [ 33 ] ; lint wei [ 50 ] ; lint dfs ( int pos , int num0 , int limit , int pre , int num1 ) { if ( pos == - 1 ) return num0 >= num1 ; lint ans = 0 ; if ( ! limit && dp [ pos ] [ num0 ] [ num1 ] != - 1 ) return dp [ pos ] [ num0 ] [ num1 ] ; int up = limit ? wei [ pos ] : 1 ; for ( int i = 0 ; i <= up ; i ++ ) { if ( pre ==

二进制中1的个数

孤街浪徒 提交于 2020-02-10 11:03:28
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 public class Solution { public int NumberOf1 ( int n ) { int count = 0 ; //二进制中1的个数 while ( n != 0 ) { count ++ ; //如果1个整数不为0,那么它的二进制最起码有1个1 n = n & ( n - 1 ) ; //n&(n-1)实现将n的最右边一个1去掉; } return count ; } } tips: 非零整数减1,那么原来处在整数二进制最右边的1就会变为0,原来在1后面的所有0都会变成1,其余所有位将不会受到影响。 来源: CSDN 作者: ColaCrisps 链接: https://blog.csdn.net/ColaCrisps/article/details/104244440

二进制状态压缩:应用及例题

风格不统一 提交于 2020-02-10 08:01:39
1.位运算: https://www.cnblogs.com/yrjns/p/11246163.html 符号 描述 运算规则 & 与 两个位都为1时,结果才为1 | 或 两个位都为0时,结果才为0 ^ 异或 两个位相同为0,相异为1 ~ 取反 0变1,1变0 << 左移 各二进位全部左移若干位,高位丢弃,低位补0 >> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) Tips: (1)&与相当于求交集操作,|相当于求并集操作 (2)位运算中的& | 不同于判断条件中的与和或,也就是if中的条件句要写成a&&b 或 a||b (3)注意运算的优先级:不知道优先级就加括号就行!优先级: https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin 2.状压操作: (1)取出整数n在二进制表示下的第k位:(n>>k)&1,将n右移k位得到第k位的数值 (2)取出整数n在二进制表示下的第0~k-1位:n&((1<<k)-1),2^k-1应当表示从0~k-1为所有都为1,高于k位表示0的数,与之and操作取出0~k-1范围内的1 (3)把整数n的第k为取反:n^

关于C++中有符号整型和无符号整型的转换方法

浪尽此生 提交于 2020-02-09 18:24:18
首先举个c++代码,如下: #include <iostream> using namespace std; /* * 这个程序演示了有符号整数和无符号整数之间的差别 */ int main() { short int i; // 有符号短整数 short unsigned int j; // 无符号短整数 j = 50000; i = j; cout << i << " " << j; return 0; } 输出结果为: -15536 50000 转换方法(以16位二进制为例): (1) 有符号十进制整型→无符号十进制整型 将有符号十进制整数转换二进制,由于最高位为符号位,此时将符号位按数据位进行转换,转换的十进制数即为无符号整型数。 注意:负数的二进制是最高位为符号位,其余位为绝对值的补码(绝对值原码取反+1),0011,1100,1011,0000(绝对值原码),1100,0011,0101,0000(取反加1,最高位为1),该二进制为-15536的二进制表示。现将二进制所有位视为数据位转换十进制,即得50000。 (2) 无符号十进制整型→有符号十进制整型 将无符号十进制整数转换成二进制,减1并按位取反,然后转换成十进制。 举例: 无符号整型数 50000,其二进制为‭1100,0011,0101,0000‬,最高位为1,因此转换后的有符号整型数为负数,其余位视为整体

检错与纠错码

自古美人都是妖i 提交于 2020-02-09 07:32:03
1. 奇偶校验法:   奇校验,数值部分各个位上数的和与校验位的和应是一个奇数,即,1的个数为奇数个,包括校验位。常用于同步传输。   偶校验,包括校验位有偶数个1,常用于异步传输或低速传输。   通常是在每个字节后增加一个附加位(奇偶校验位),即每个字节发送九位数据。   缺点,数位的错误以及偶数个位的错误检测不出来,无法定位错误。   例:      2. 循环冗余校验法:   循环冗余( CRC )检验:数据M后面添加供差错检验用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。【模2运算求n:M÷P=Q…R,n即R】,校验时除以P(模2运算), 余数R为0,则接受,不为0,则判定这个帧有差错 。   具体:   在发送端,先把数据划分为组,假定每个组k个比特。现假定待传送的数据M=101001(k=6)。CRC运算就是在数据M后面添加供差错检验用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。在要发送的数据后面加n位的冗余码,虽然增加了数据传送的开销,但却可以进行差错检测。   这n位冗余码可以通过下面的方法得出。用二进制的模2运算进行2^n乘M的运算,即在M后面添加n个0。得到k+n位的数除以收发双方事先商定的长度为(n+1)位的除数p(p也可叫做 生成多项式G ,没固定),得出商是Q,余数是R(n位,比p少一位)。 例:      M=101001