二进制

宽字符,Ansic和Unicode

≯℡__Kan透↙ 提交于 2020-04-01 04:23:15
电脑发展的初期,只是在美国等英文国家使用,英文只有26个字母和其它字符,一个字节最多可以表示256个字符,如字母“A”用0x41(二进制01000001)表示,字母“a”用0x61(二进制01100001)表示。为了使各家电脑公司生产的电脑统一,美国搞了个国家标准ANSI,一直沿用至今,我们今天用的电脑普通情况下使用的都ANSI编码。 ANSI编码,每个字符占一个字节,但最多只能表示256个字符。 汉字等东亚语言字符怎么办呢?于是采用两个字节共同表示一个汉字的方法。二个字节理论上可以表示65535个字符。 因为ANSI标准是用一个字节的7个位表示一个普通字符,最高位为0(如字母“A”的二进制01000001),所以表示汉字就采用最高位为1来表示。如“中”字就是用0xD6、0xD0表示(二进制11010110、11010000)。 程序员判断一个字符是否为汉字,就是通过最高位是否为1来判断的。 但是,中国大陆的汉字表示方法叫GB码(中国国家标准,如GB2312),中国台湾、香港的汉字表示方法叫BIG5码(大五码,台湾一家民营公司提出),还有韩、日等字符,还是造成了计算机文字表示的不统一。 所以,在W98时代,电脑上网、收发邮件等经常出现乱码的现象(就是文字标准不统一造成的) ANSI编码字符,叫多字节字符 UNICODE编码,每个字符占二个字节。也叫万国码(一种国际标准字符集

N11-该数二进制表示中1的个数

不问归期 提交于 2020-04-01 02:23:44
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 package new_offer; /** * 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 * @author Sonya * */ public class N11_NumberOf1 { public int NumberOf1(int n) { String bstring=Integer.toBinaryString(n);// System.out.print("转换成的二进制字符串: "); System.out.println(bstring); char[]ch=bstring.toCharArray(); System.out.print("转换成的二进制数组: "); System.out.println(ch); int count=0; for(int i=0;i<ch.length;i++) { System.out.print("二进制数组: "+i+" "); System.out.println(Integer.valueOf(ch[i])); if(Integer.valueOf(ch[i])==49) count++;//valueof 的值为 字符的ASCLL值 } return count; } /** * 如果一个整数不为0

linux的文件目录

别说谁变了你拦得住时间么 提交于 2020-03-31 21:52:35
1 Bin binary 含义二进制,该目录中存储的都是二进制文件,文件都是可以运行的。 2 Dev目录 目录中主要存放的是外接设备,例如外接移动硬盘,U盘,光盘,在其中的外接设备不能直接被使用,需要挂载(类似windows下的分配盘符)。 3 Etc 该目录主要是存储一些配置文件。 4 Home 家目录,除了root用户以外其他用户的家目录,类似于 Windows 下的 user/用户目录。 5 Proc process 表示进程,该目录中存储的是linux运行时候的进程。 6 Root 该目录表示root用户自己的目录。 7 Sbin 全称 super binary,该目录也是存放一些可以被执行的二进制文件,但是必须有super权限的用户才能执行。 8 Tmp temporary,表示临时的,当我们系统运行时产生的临时文件会存储在这个目录下。 9 Usr 存放的用户自己安装的软件,类似于Windows下的program files。 10 Var 存放的程序/系统的日志文件的目录。 11 Mnt 当外接设备需要挂载时,就需要挂载到mnt目录下。 来源: https://www.cnblogs.com/liuryu/p/10766326.html

不用【加减乘除】求两个整数之和

杀马特。学长 韩版系。学妹 提交于 2020-03-31 08:58:43
  首先我们可以分析人们是如何做十进制的加法的,比如是如何得出5+17=22这个结果的。实际上,我们可以分成三步进行: 只做各位相加不进位,此时相加的结果是12(个位数5和7相加不要进位是2,十位数0和1相加结果是1); 做进位,5+7中有进位,进位的值是10;第三步把前面两个结果加起来,12+10的结果是22,刚好5+17=22。   我们一直在想,求两数之和四则运算都不能用,那还能用什么?对数字做运算,除了四则运算之外,也就只剩下位运算了。位运算是针对二进制的,我们就以二进制再来分析一下前面的三步走策略对二进制是不是也适用。 5的二进制是101,17的二进制是10001。还是试着把计算分成三步: 各位相加但不计进位,得到的结果是10100(最后一位两个数都是1,相加的结果是二进制的10。这一步不计进位,因此结果仍然是0); 记下进位。在这个例子中只在最后一位相加时产生一个进位,结果是二进制的10; 把前两步的结果相加,得到的结果是10110,转换成十进制正好是22。由此可见三步走的策略对二进制也是适用的。   接下来我们试着把二进制的加法用位运算来替代。第一步不考虑进位对每一位相加。0加0、1加1的结果都0,0加1、1加0的结果都是1。我们注意到,这和异或的结果是一样的。对异或而言,0和0、1和1异或的结果是0,而0和1、l和0的异或结果是1。接着考虑第二步进位,对0加0

不用加减乘除做加法

放肆的年华 提交于 2020-03-31 08:57:37
题目:写一个函数,求两个整数之和,要求在函数体内不得使用“+、-、*、/”四则运算符号 解题思路:对数字做运算除了四则运算之外,也就只剩下位运算了。位运算是针对二进制的,我们就以二进制再来分析一下前面的三步走策略对二进制是不是也适用。 5的二进制是101,17的二进制是10001.还是试着把计算分成三步:第一步歌薇相加但不计进位,得到的结果是10100(最后一位两个数都是1,相加的结果是二进制的10.这一步不计进位,因此结果仍然是0);第二步记下进位。在这个例子中只在最后一位相加时产生一个进位,结果是二进制的10;第三步把前两步的结果相加,得到的结果是10110,转换成十进制正好是22.由此可见三步走的策略对二进制也是适用的。 接下来我们试着把二进制的加法用位运算来替代。第一步不考虑进位对每一位相加。0加0,1加1的结果都是0,0加1,1加0的结果都是1.我们注意到,这和异或的结果是一样的。对异或而言,0和0、1和1异或的结果是0,而0和1、1和0异或的结果是1.接着考虑第二步进位,对0加0、0加1、1加0而言,都不会产生进位,只有1加1时,会向前产生一个进位。此时我们可以想象成是两个数先做位与运算,然后再向左移动一位。只有两个数都是1的时候,位与得到的结果是1,其余都是0.第三步把前两个步骤的结果相加。第三步相加的过程依然是重复前面两步,直到不产生进位为止。 来源: https:

LeetCode.868-二进制距离(Binary Gap)

一世执手 提交于 2020-03-29 03:22:50
这是悦乐书的第 333 次更新,第 357 篇原创 01看题和准备 今天介绍的是LeetCode算法题中Easy级别的第203题(顺位题号是868)。给定正整数N,找到并返回N的二进制表示中两个连续1之间的最长距离。如果没有连续两个1,则返回0。例如: 输入:22 输出:2 说明:22的二进制是10110。在22的二进制表示中,有三个1,第一对连续的1距离为2,第二对1的距离为1,答案是这两个距离中最大的一个,即2。 输入:5 输出:2 说明:5的二进制是101。 输入:6 输出:1 说明:6的二进制是110。 输入:8 输出:0 说明:8的二进制是1000。在二进制表示为8时没有任何连续的1,所以我们返回0。 注意 : 1 <= N <= 10 ^ 9 02 第一种解法 题目的意思是计算一个二进制数中每对1的最长距离,若是只有一个1,距离则为0。 因此,我们先将N转为一个二进制字符串,然后去遍历字符串中的字符,使用一个临时变量存储前一个1的索引值,遇到新的1时就计算彼此之间的距离,取最大值,最后输出距离。 public int binaryGap(int N) { String str = Integer.toBinaryString(N); int prev = -1, distance = 0; for (int i=0; i<str.length(); i++) { if

OSI体系结构(一)——物理层详解

我与影子孤独终老i 提交于 2020-03-28 16:19:16
前言 我们知道,虽然OSI协议的实现太过于复杂,几乎没有厂商可以生产出符合该协议的通信产品,但OSI七层模型的体系结构,概念十分清晰,理论也很完整。本文就OSI体系结构来进行介绍和对比。 国际标准化组织除了定义了OSI参考模型外,还开发了实现7个功能层次的各种协议和服务标准,这些协议和服务统称为“OSI协议”。OSI协议是一些已有的协议和OSI新开发的协议的混合体。例如,大部分物理层和数据链路层协议采用的是现有的协议,而数据链路层以上的是由该组织自行起草的。产生OSI协议的目的是提出能满足所有组网需求的国际标准,但到目前为止,实现情况距离这一目标还非常遥远。 虽然OSI协议集缺乏商业动力,但OSI/RM作为网络系统的知识框架,对于学习和理解网络标准还是十分有用的。和其他的协议集一样,OSI协议是实现某些功能过程的描述和说明。每一个OSI协议都详细的规定了特定层次的功能特性。 OSI协议集如下图所示: 下面我们来分别说明7个功能层次的各种协议与各层的功能: 在物理层中,OSI采用了各种现有的协议,其中有RS-232、RS-449、X.21、V.35、ISDN,以及FDDI、IEEE 802.3、IEEE 802.4和IEEE 802.5的物理层协议。 物理层(Physical Layer)是OSI模型中最低的一层,位于OSI参考模型的最底层,它直接面向实际承担数据传输的物理媒体

Java编程的逻辑 (27) - 剖析包装类 (中)

微笑、不失礼 提交于 2020-03-27 23:42:36
本节继续探讨包装类,主要介绍Integer类,下节介绍Character类,Long与Integer类似,就不再单独介绍了,其他类基本已经介绍完了,不再赘述。 一个简单的Integer还有什么要介绍的呢?它有一些二进制操作,我们来看一下,另外,我们也分析一下它的valueOf实现。 为什么要关心实现代码呢?大部分情况下,确实不用关心,我们会用它就可以了,我们主要是为了学习,尤其是其中的二进制操作,二进制是计算机的基础,但代码往往晦涩难懂,我们希望对其有一个更为清晰深刻的理解。 我们先来看按位翻转。 位翻转 用法 Integer有两个静态方法,可以按位进行翻转: public static int reverse(int i) public static int reverseBytes(int i) 位翻转就是将int当做二进制,左边的位与右边的位进行互换,reverse是按位进行互换,reverseBytes是按byte进行互换。我们来看个例子: int a = 0x12345678; System.out.println(Integer.toBinaryString(a)); int r = Integer.reverse(a); System.out.println(Integer.toBinaryString(r)); int rb = Integer

[转]Base64 算法原理,以及编码、解码【加密、解密】 介绍

独自空忆成欢 提交于 2020-03-27 20:15:13
Base64编码,是我们程序开发中经常使用到的编码方法。它是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用作电子邮件标准)中一种可打印字符表示二进制数据的常见编码方法!它其实只是定义用可打印字符传输内容一种方法,并不会产生新的字符集!有时候,我们学习转换的思路后,我们其实也可以结合自己的实际需要,构造一些自己接口定义编码方式。好了,我们一起看看,它的转换思路吧! Base64实现转换原理 它是用64个可打印字符表示二进制所有数据方法。由于2的6次方等于64,所以可以用每6个位元为一个单元,对应某个可打印字符。我们知道三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要用4个Base64的可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中一般有所不同。但是,我们经常所说的Base64另外2个字符是:“+/”。这64个字符,所对应表如下。 编号 字符 编号 字符 编号 字符 编号 字符 0 A 16 Q 32 g 48 w 1 B 17 R 33 h 49 x 2 C 18 S 34 i 50 y 3 D 19 T 35 j 51 z 4 E 20 U 36 k 52 0 5 F 21

centos7下二进制安装mysql5.6

本秂侑毒 提交于 2020-03-27 14:54:49
1、检查系统中是否已安装mysql或mariadb.   rpm -qa|grep mysql   rpm -qa|grep mariadb 如果为空,则 说明没有安装       2、卸载已安装的mariadb数据库   rpm -qa|grep mariadb|xargs rpm -e --nodeps 3、再次查看已安装的 mariadb 数据库,确认是否卸载完成。   rpm -qa|grep mariadb 4、下载mysql5.6二进制安装包   https://dev.mysql.com/downloads/mysql/ mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz   上传到Linux服务器 /usr/local/下 5、安装mysql5.6(在/usr/local/mysql56)   1、创建mysql用户账号     useradd -s /sbin/nologin -M mysql   2、解压压缩包、并重命名     cd /usr/local     tar -xzvf mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz     mv mysql-5.6.47-linux-glibc2.12-x86_64 mysql56   3、复制配置文件、并修改配置文件     cp /usr