二进制

【转载】终于搞明白二进制中,原码、反码、补码 到底都是些什么东东?

故事扮演 提交于 2020-02-13 09:39:43
要说清这个问题,需要颠覆你对补码的理解 第一步,就像练北冥神功要先散功一样,先把你心中对原码,反码,补码的一套认识全部忘掉 | | | | | | | | | | | | | | | | | V 第二步,正式开讲 首先灌输一个新的概念叫,模 什么是“模”,想象日常使用的钟表,它可以显示0~12点的时间,假设现在是2点钟,请用手动拨动时针的方式将时间减4小时,你会怎么做? 有两种方式: 逆时针将时针拨4小时 顺时针将时针拨8(12-4)小时 这里要讲的是第二种方式,为什么顺时针拨12-4也可以达到和正常思维的第一种方式一样的位置。 12就是模。 同样的,如果是十进制的两位数,80-10 和 80+90在不考虑百位数的基础上都是70。这里的90就是100-10得来的,这种情况下100就是模 模就好比是一个极限,在它的范围内,两个相加等于模的数互为补数,还是举100的例子 90和10, 55和45,68和32,互为补数 在模的范围内做减法,可以将“ X-Y ”的减法变更为“ X+Y的补数 “的加法,当然前提是不考虑百位数 思考题, 上面举的例子是大数减小数,那么如果是小数减大数会怎么样呢? 如果是10-80,结果应该是-70,但如果按照10+(100-80),结果是30。 而很明显-70和30不是一回事,这里也没有百位数的问题,这种情况应该怎么破? 当初的那些先贤们想出来的办法很简单

python文件操作

只谈情不闲聊 提交于 2020-02-13 03:06:06
在文本模式下读取时,默认会把平台特定的行结束符 (Unix 上的 \n, Windows 上的 \r\n) 转换为 \n。在文本模式下写入时,默认会把出现的 \n 转换回平台特定的结束符。这样在幕后修改文件数据对文本文件来说没有问题,但是会破坏二进制数据例如 JPEG 或 EXE 文件中的数据。请一定要注意在读写此类文件时应使用二进制模式。 open( 文件名路径 , 打开方式 ) 打开文件 通常使用和 with as 语法一起使用 with open(’/home/myfile’,‘a/w/r’) as f1: f1.read() #读取文件的全部数据 f1.readline() # 读取文件的一行数据 a/w/r+ b 等于 按照二进制打开 二进制打开可以保护文件格式不被改变,对于文本文件通常没有必要 但是会破坏二进制数据例如 JPEG 或 EXE 文件中的数据。请一定要注意在读写此类文件时应使用二进制模式。 其中 w 打开文件会截断 f1.close() 手动关闭文件 f.write(string) 会把 string 的内容写入到文件中,并返回写入的字符数。: #写入文件 with open ( 'file1' , 'w+' ) as f1: for i in range ( 5 ) : f1.write ( '第 {:_^10} 行内容\n' .format ( i ))

剑指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

IP地址与子网掩码

拈花ヽ惹草 提交于 2020-02-12 21:22:56
1. 子网掩码的作用 ●子网掩码必须和IP地址成对出现,否则没有意义 ●子网掩码是用于给IP地址划分网络地址与主机地址的 ●和子网掩码1对应的IP地址,代表网络位;和子网掩码0对应的IP地址,代表主机位 ●子网中只要1是连续的,就是合理子网掩码 网络地址与主机地址: 2. 标准子网掩码 ●A类IP 10.1.1.1 标准子网掩码: 255.0.0.0 子网掩码二进制: 1111111.00000000.00000000.00000000 IP地址前8位是网络地址,后24位是主机地址 ●B类IP 172.16.1.1 标准子网掩码: 255.255.0.0 子网掩码二进制: 1111111.11111111.00000000.00000000 IP地址前16位是网络地址,后16位是主机地址 C类IP 192.168.1.1 标准子网掩码: 255.255.255.0 子网掩码二进制: 11111111.1111111.11111111.00000000 IP地址前24位是网络地址,后8位是主机地址 3. 子网掩码计算公式 ●网络地址:把IP地址和子网掩码的二进制,按位进行逻辑与运算 ●广播地址:有效子网掩码中,有几个0 ,就把IP地址的后几位换为1 ●子网个数:有效子网掩码中,有几个1 ,子网数就是2的几次方 ●主机个数:有效子网掩码中,有几个0 ,主机数就是2的几次方减2 4

(纯干货)HTTP/1.0/1.1/2.0的区别以及http和https的区别

≯℡__Kan透↙ 提交于 2020-02-12 21:11:00
https://segmentfault.com/a/1190000015316332 深入理解http1.x、http 2和https 一、HTTP/1.x Http1.x 缺陷 :线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数目的请求会被阻塞 http1.0 缺陷 :浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接(T CP连接的新建成本很高,因为需要客户端和服务器三次握手 ),服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求; 解决方案 : 添加头信息——非标准的Connection字段 Connection: keep-alive http1.1: 改进点: 持久连接 引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明 Connection: keep-alive (对于同一个域名,大多数浏览器允许同时建立6个持久连接) 管道机制 即在同一个TCP连接里面,客户端可以同时发送多个请求。 分块传输编码 即服务端没产生一块数据,就发送一块,采用”流模式”而取代”缓存模式”。 新增请求方式 PUT:请求服务器存储一个资源; DELETE:请求服务器删除标识的资源; OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求; TRACE:请求服务器回送收到的请求信息

剑指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 ) : #

课堂动手动脑

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-12 16:07:56
1、编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果。 源代码: 1 package tutorial; 2 import javax.swing.JOptionPane; 3 4 public class Option2 { 5 6 7 public static void main(String[] args) { 8 String firstNumber,secondNumber,result; 9 10 int number1,number2; 11 12 firstNumber = JOptionPane.showInputDialog("The first number :"); 13 14 secondNumber = JOptionPane.showInputDialog("The second number :"); 15 16 number1 = Integer.parseInt(firstNumber); 17 18 number2 = Integer.parseInt(secondNumber); 19 20 result = number1 + " + " + number2 + " = " + (number1 + number2) + "\n" + number1 + " - " + number2 + " = " +

蓝桥杯--算法训练 二进制数数(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 ++ ) {

前端获取二进制流下载文件并解决无法获header问题,Content-Disposition

感情迁移 提交于 2020-02-12 12:18:02
CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。 如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。 在返回时插入如下代码段: 1 Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition"); 来源: https://www.cnblogs.com/TbKing-blogs/p/12298051.html

位运算和enum中的位运算

只愿长相守 提交于 2020-02-12 11:25:48
1、 位逻辑非运算   ~ 位逻辑非运算是单目的,只有一个运算对象。位逻辑非运算按位对运算对象的值进行非运算,即:如果某一位等于0,就将其转变为1;如果某一位等于1,就将其转变为0。 比如,对二进制的10010001进行位逻辑非运算,结果等于01101110,用十进制表示就是: ~145等于110;对二进制的01010101进行位逻辑非运算,结果等于10101010。用十进制表示就是~85等于176。 2 、位逻辑与运算   & 位逻辑与运算将两个运算对象按位进行与运算。与运算的规则:1与1等于1,1与0等于0,0与0等于0。 只有 1&1 = 1,其余均为0 比如:10010001(二进制)&11110000等于10010000(二进制)。 3、 位逻辑或运算   | 位逻辑或运算将两个运算对象按位进行或运算。或运算的规则是:1或1等1,1或0等于1, 0或0等于0。只有 0|0=0,其余均为1 比如10010001(二进制)| 11110000(二进制)等于11110001(二进制)。 4 、位逻辑异或运算   ^ 位逻辑异或运算将两个运算对象按位进行异或运算。异或运算的规则是:1异或1等于0,1异或0等于1,0异或0等于0。即:相同得0,相异得1。 比如:10010001(二进制)^11110000(二进制)等于01100001(二进制)。 5 、位左移运算   <<