shell 彩色 echo

shell 彩色 echo #黑底红字 echo -e 'E[31;40mThis prints in red.'; tput sgr0 #!/bin/bash echo -e 'E[COLOR1;COLOR2mSome text goes here.' COLOR1: Foreground Color COLOR2: Background Color #!/bin/bash echo -e 'E[32;40mThis prints in green.'; tput sgr0 echo -e:enable interpretation of backslash escapes -e "允许 反斜杠 (对字符)的转义" e[32;1m: 控制字体和背景颜色的转义字符,3037是字体颜色、4047是背景颜色 “m"终止该转义序列, 然后文本以结束的转义指定的属性显示. tput sgr0: 把终端设置恢复为原样. 如果省略这一句会使后续在该终端的输出仍为xx色. 色彩 前景色 背景色 黑 30 40 红 31 41 ...

2011-07-28 · 1 min · 83 words · -

linux 环境变量, export, set, env, source, exec

linux 环境变量, export, set, env, source, exec 定义变量时加 export 表示为全局变量,不止对当前 shell 有效,对子进程也有效,不加 export 则为局部变量,只对当前 shell 有效,子进程无效。 set 设置了当前 shell 进程的本地变量,本地变量只在当前 shell 的进程内有效,不会被子进程继承和传递。 env 仅为将要执行的子进程设置环境变量。 export 将一个 shell 本地变量提升为当前 shell 进程的环境变量,从而被子进程自动继承,但是 export 的变量无法改变父进程的环境变量。 source 运行脚本的时候,不会启用一个新的 shell 进程,而是在当前shell进程环境中运行脚本。 exec 运行脚本或命令的时候,不会启用一个新的 shell 进程,并且 exec 后续的脚本内容不会得到执行,即当前shell进程结束了。 https://segmentfault.com/a/1190000013356532 .bashrc 文件 这种方法可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。 (1)用文本编辑器打开用户目录下的.bashrc文件 (2)在.bashrc文件末尾加入: JAVA_HOME=/usr/share/jdk1.5.0_05 export JAVA_HOME PATH=$JAVA_HOME/bin:$PATH export PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export CLASSPATH 重新加载 source .bashrc ########################################################## /etc/profile文件 所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。 (1)用文本编辑器打开/etc/profile (2)在profile文件末尾加入: JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME ...

2011-07-18 · 2 min · 241 words · -

vscode, java, remote ssh

vscode, java 在vscode 中下载以下插件 Extension Pack for Java Language Support for Java™ by Red Hat Debugger for Java Test Runner for Java Maven for Java Project Manager for Java Extension Pack for Java java config

2011-07-18 · 1 min · 35 words · -

ln link 软连接和硬连接

ln command, 软连接和硬连接 ln [参数][源文件或目录][目标文件或目录] -f, --force remove existing destination files # 创建软连接 # 原文件: foo # symbolic link : bar ln -s foo bar #硬连接 ln foo bar # 删除链结 unlink link0 # see the actual contents of a symlink ls -l link0 readlink link0 # 打印原始路径 ls -l link0 # 如果 link0 是个目录, 会列出目录下的文件 ls -l link0/ Linux链接分两种,一种被称为硬链接 (Hard Link) ,另一种被称为符号链接 (soft link, Symbolic Link) 。默认情况下,ln命令产生硬链接。 ...

2011-07-13 · 4 min · 769 words · -

环形队列

环形队列 环形队列, circle queue 环形缓冲区 (ring buffer)也称作循环缓冲区 (cyclic buffer)、圆形队列 (circular queue)、圆形缓冲区 (circular buffer) 环形队列是在实际编程极为有用的数据结构,它有如下特点。 它是一个首尾相连的FIFO的数据结构,采用数组的线性空间,数据组织简单。能很快知道队列是否满为空。能以很快速度的来存取数据。 因为有简单高效的原因,甚至在硬件都实现了环形队列. 环形队列广泛用于网络数据收发,和不同程序间数据交换 (比如内核与应用程序大量交换数据,从硬件接收大量数据) 均使用了环形队列. 一.环形队列实现原理 内存上没有环形的结构,因此环形队列实上是数组的线性空间来实现。那当数据到了尾部如何处理呢?它将转回到0位置来处理。这个的转回是通过取模操作来执行的。 因此环列队列的是逻辑上将数组元素q[0]与q[MAXN-1]连接,形成一个存放队列的环形空间。 为了方便读写,还要用数组下标来指明队列的读写位置。head/tail.其中head指向可以读的位置,tail指向可以写的位置。 环形队列的关键是判断队列为空,还是为满。当tail追上head时,队列为满时,当head追上tail时,队列为空。但如何知道谁追上谁。还需要一些辅助的手段来判断. 如何判断环形队列为空,为满有两种判断方法。 一.是附加一个标志位tag 当head赶上tail,队列空,则令tag=0, 当tail赶上head,队列满,则令tag=1, 二.限制tail赶上head,即队尾结点与队首结点之间至少留有一个元素的空间。 队列空: head==tail 队列满: (tail+1)% MAXN ==head

2011-07-13 · 1 min · 35 words · -

优先级翻转

优先级翻转 所谓优先级翻转问题(priority inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。 例如: 有优先级为A、B和C三个任务,优先级A>B>C,任务A,B处于挂起状态,等待某一事件发生,任务C正在运行,此时任务C开始使用某一共享资源S。在使用中,任务A等待事件到来,任务A转为就绪态,因为它比任务C优先级高,所以立即执行。当任务A要使用共享资源S时,由于其正在被任务C使用,因此任务A被挂起,任务C开始运行。如果此时任务B等待事件到来,则任务B转为就绪态。由于任务B优先级比任务C高,因此任务B开始运行,直到其运行完毕,任务C才开始运行。直到任务C释放共享资源S后,任务A才得以执行。在这种情况下,优先级发生了翻转,任务B先于任务A运行。 解决优先级翻转问题有优先级天花板(priority ceiling)和优先级继承(priority inheritance)两种办法。 优先级天花板是当任务申请某资源时, 把该任务的优先级提升到可访问这个资源的所有任务中的最高优先级, 这个优先级称为该资源的优先级天花板。这种方法简单易行, 不必进行复杂的判断, 不管任务是否阻塞了高优先级任务的运行, 只要任务访问共享资源都会提升任务的优先级。 优先级继承是当任务A 申请共享资源S 时, 如果S正在被任务C 使用,通过比较任务C 与自身的优先级,如发现任务C 的优先级小于自身的优先级, 则将任务C的优先级提升到自身的优先级, 任务C 释放资源S 后,再恢复任务C 的原优先级。这种方法只在占有资源的低优先级任务阻塞了高优先级任务时才动态的改变任务的优先级,如果过程较复杂, 则需要进行判断。

2011-07-11 · 1 min · 27 words · -

java float,double,decimal

‘java float,double,decimal’ decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。 (28个有效位) float f = 345.98756f;//结果显示为345.9876,只显示7个有效位,对最后一位数四舍五入。 double d=345.975423578631442d;//结果显示为345.975423578631,只显示15个有效位,对最后一位四舍五入。 注: float和double的相乘操作,数字溢出不会报错,会有精度的损失。 decimal dd=345.545454879…..//可以支持28位,对最后一位四舍五入。 注: 当对decimal类型进行操作时,数值会因溢出而报错。 由于对float或double 的使用不当,可能会出现精度丢失的问题。问题大概情况可以通过如下代码理解: public class FloatDoubleTest { public static void main(String[] args) { float f = 20014999; double d = f; double d2 = 20014999; System.out.println("f=" + f); System.out.println("d=" + d); System.out.println("d2=" + d2); } } 得到的结果如下: f=2.0015E7 d=2.0015E7 d2=2.0014999E7 从输出结果可以看出double 可以正确的表示20014999 ,而float 没有办法表示20014999 ,得到的只是一个近似值。这样的结果很让人讶异。20014999 这么小的数字在float下没办法表示。于是带着这个问 题,做了一次关于float和double学习,做个简单分享,希望有助于大家对java 浮 点数的理解。 关于 java 的 float 和 double ...

2011-07-03 · 2 min · 269 words · -

机器零

机器零 计算机中机器零是指: 如果一个浮点数的尾数全为0,则不论其阶码为何值,计算机在处理时都把这种浮点数当作零看待; 如果一个浮点数的阶码小于它所表示范围的最小值,则不论其尾数为何值,计算机在处理时都把这种浮点数当作零看待。 计算机保存数字的位有限,所能表示最小的数也有范围,当一个表示方式比它所能表示的数更小时,计算机无法表示,就作为0处理,实际上,这个数也很接近0了. 浮点数定义其实就是0.XXXXX * 2^XXXX 零点多少乘以2的多少次方 其中零点多少就是尾数,2的多少次方就是阶码,不管计算机用几位表示阶码,肯定有个表示的范围,一共有负的最大值,负的最小值,正的最大值,正的最小值4种限制. 当一个表示方式中的阶码是负数,而且这个负数小于计算机所能表示的阶码 如以上2的XXX次方中,XXX是负数 (绝对值很大) ,非常小,在数学上这个值就非常接近于零,在计算机上,因为无法表示比这个值更小了,所以就把这个浮点数作为零处理 补充: 不用管位数,先看阶码 假设一个10进制的数,0.9999*10^-9999999999999999999999999, 10的-99999999999999999999999次方,那么这个数是不是很接近0, 不管前面的0.9999是正还是负 对于2进制也一样,0.1111*2^-111111111111111111111111111111 计算机保存数字的位有限,所能表示最小的数也有范围,当一个表示方式比它所能表示的数更小时,计算机无法表示,就作为0处理,实际上,这个数也很接近0了.

2011-07-03 · 1 min · 21 words · -

基数

基数 在数学上,基数(cardinal number)也叫势(cardinality),指集合论中刻画任意集合所含元素数量多少的一个概念。两个能够建立元素间一一对应的集合称为互相对等集合。例如3个人的集合和3匹马的集合可以建立一 一对应,是两个对等的集合。此外还有语言学和军事上的基数。 根据对等这种关系对集合进行分类,凡是互相对等的集合就划入同一类。这样,每一个集合都被划入了某一类。任意一个集合A所属的类就称为集合A的基数,记作(或|A|,或cardA)。这样,当A 与B同属一个类时,A与B 就有相同的基数,即|A|=|B|。而当 A与B不同属一个类时,它们的基数也不同。 如果把单元素集的基数记作1,两个元素的集合的基数记作2,等等,则任一个有限集的基数就与通常意义下的自然数一致 。空集的基数也记作σ 。于是有限集的基数也就是传统概念下的"个数"。但是,对于无穷集,传统概念没有个数,而按基数概念,无穷集也有基数,例如,任一可数集 (也称可列集) 与自然数集N有相同的基数,即所有可数集是等基数集。不但如此,还可以证明实数集R与可数集的基数不同。所以集合的基数是个数概念的推广。 社保缴费基数[2]基数可以比较大小。假设A,B的基数分别是a,β,即|A|=a,|B|=β,如果A与B的某个子集对等,就称 A 的基数不大于B的基数,记作a≤β,或β≥a。如果 a≤ β,但a≠β ( 即A与B不对等 ) ,就称A的基数小于B的基数,记作a<β,或β>a。在承认策梅罗(Zermelo)选择公理的情况下,可以证明基数的三岐性定理——任何两个集合的基数都可以比较大小,即不存在集合A和B,使得A不能与B的任何子集对等,B也不能与A的任何子集对等。 基数可以进行运算 。设|A|=a ,|A|=β,且 A∩B是空集,则规定为a 与β之和记作=a +β。设|A|=a,|B|=β,A×B为 A与B的积集,规定为 a 与β的积,记作=a·β。

2011-07-03 · 1 min · 31 words · -

计算机中的原码、反码和补码

计算机中的原码、反码和补码 一、机器数和真值 机器数 数在计算机中的二进制表示形式就称为机器数。机器数是带符号的,在计算机用一个数的最高位存放符号 (0为正,1为负) ,将数的符号数值化。 十进制中的数 +5 ,计算机字长为8bits,转换成二进制就是00000101。如果是 -5 ,就是 10000101 。 00000101 和 10000101 就是机器数。 真值 因为符号占据一位,机器数的形式值就不等于真正的数值。例如上面的有符号数 10000101,其最高位1代表负,其真正数值是 -5 而不是形式值133 (10000101转换成十进制等于133) 。所以,为区别起见,带符号位的机器数对应的真正数值称机器数的真值。 例: 00100001的真值 = 0 0100001 = +33,10100011的真值 = 1 0100011 = -35 二、计算机符号数的表示方法 符号数值化后,为了方便地对机器数进行算术运算,提高运算速度,人们设计了符号数的各种编码方法,最常见的有原码、反码和补码。 原码 原码就是符号位加上真值的绝对值。简单说,就是符号位加上数的二进制表示。比如,+3 (以8bit为例) ,符号位为0,3转化为二进制就是11,那么 +3 的原码就是00000011 (不足部分补0) 。同理, -3,符号位为1,3转化为二进制就是11,那么 -3 的原码就是10000011 (不足部分补0) 。即: [+3] = [00000011]原 [-3] = [10000011]原 反码 一个负数的符号位不动,其余位取反,就是机器数的另一种表示形式——反码。正数的反码与原码形式一样。 [+3] = [00000011]原 = [00000011]反 [-3] = [10000011]原 = [11111100]反 补码 正数的原码反码补码是一样的。补码符号位不变化其余各位原码取反(反码)+1换言之 反码+1 ...

2011-07-03 · 1 min · 114 words · -

为什么要使用原码 反码 补码.

为什么要使用原码 反码 补码. 前言: 随着学习计算机知识的加深,许多地方都遇到原码、反码、补码。很多关于计算机的书籍都介绍原码、反码、补码的表示方法,但是为什么要用到原码、反码、补码却没详细说。为什么要使用?它们的原理是什么呢?我搜索了许多资料,也查找了许多书籍,终于弄明白了这个问题,收集整理如下。 我们知道数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制。而在日常生活中人们使用的是十进制,并且我们用的数值有正负之分。于是在计算机中就用一个数的最高位存放符号(0为正,1为负)。这就是机器数的原码了。 有了数值的表示方法就可以对数进行算术运算,但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits (1) 10 - (1)10 = (1)10 + (-1)10 = (0)10 (0 0000001)原 + (1 0000001)原 = (1 0000010)原 = ( -2 )显然不正确。 ...

2011-07-03 · 1 min · 126 words · -

指数

指数 数学概念: 在乘方a^n中,其中的a叫做底数,n叫做指数,结果叫幂

2011-07-03 · 1 min · 3 words · -

阶码

阶码 在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码,阶码指明了小数点在数据中的位置。 阶码: 对于任意一个二进制数n,可用N=S×2P表示,其中S为尾数,P为阶码,2为阶码的底,P、S都用二进制数表示,S表示N的全部有效数字,P指明小数点的位置。当阶码为固定值时,数的这种表示法称为定点表示,这样的数称为"定点数";当阶码为可变时,数的这种表示法称为浮点表示,这样的数称为"浮点数",这在前面已有介绍。

2011-07-03 · 1 min · 4 words · -

移码

移码 计算机中的移码 移码 (又叫增码) 是符号位取反的补码,一般用做浮点数的阶码,引入的目的是为了保证浮点数的机器零为全0。 ①移码的定义: 设由1位符号位和n位数值位组成的阶码,则 [X]移=2En + X -2n≤X ≤ 2n 例如: X=+1011 [X]移=11011 符号位"1"表示 正 号 X=-1011 [X]移=00101 符号位"0"表示 负 号 ②移码与补码的关系: [X]移与[X]补的关系是符号位互为相反数 (仅符号位不同) , 例如: X=+1011 [X]补=01011 [X]移=11011 X=-1011 [X]补=10101 [X]移=00101 ③移码运算应注意的问题: ◎对移码运算的结果需要加以修正,修正量为2En ,即对结果的符号位取反后才是移码形式的正确结果。 ◎移码表示中,0有唯一的编码——1000…00,当出现000…00时 (表示-2En) ,属于浮点数下溢。 浮点数的运算规则 浮点加减法的运算步骤 设两个浮点数 X=Mx※2Ex Y=My※2Ey 实现X±Y要用如下5步完成: ①对阶操作: 小阶向大阶看齐 ②进行尾数加减运算 ③规格化处理: 尾数进行运算的结果必须变成规格化的浮点数,对于双符号位的补码尾数来说,就必须是 001×××…×× 或110×××…××的形式 若不符合上述形式要进行左规或右规处理。 ④舍入操作: 在执行对阶或右规操作时常用"0"舍"1"入法将右移出去的尾数数值进行舍入,以确保精度。 ⑤判结果的正确性: 即检查阶码是否溢出 若阶码下溢 (移码表示是00…0) ,要置结果为机器0; 若阶码上溢 (超过了阶码表示的最大值) 置溢出标志。 例题: 假定X=0 .0110011*211,Y=0.1101101*2-10 (此处的数均为二进制) ?? 计算X+Y; 解: [X]浮: 0 1 010 1100110 ...

2011-07-03 · 1 min · 168 words · -

尾数

尾数 尾数: 在数学里,专指小数点后面的数字,现实生活中也指记账等号码的后几位,常用在手机号码、身份证号码等. 在计算机中, 对于任意一个二进制数n,可用N=S×2P表示,其中S为尾数,

2011-07-03 · 1 min · 5 words · -

定点数

定点数 定点数: 计算机中采用的一种数的表示方法。参与运算的数的小数点位置固定不变。 定点整数: 小数点位固定在最后一位之后称为定点整数。若机器字长为n+1位,数值表示为: X=X0X1X2…Xn,其中Xi={0,1},0≤i≤n 即(-1)^X0 * (X1*2^(n-1) + X2*2^(n-2) + … + Xn-1*2 + Xn) 数值范围是 -(2^n-1)≤X≤2^n-1 例如: 1111表示-7。 定点小数: 小数点固定在最高位之后称为定点小数。若机器字长为n+1位,数值表示为: X=X0.X1X2…Xn,其中Xi={0,1},0≤i≤n (这里X0不表示数字,只表示符号,若X0=0,则代表X=0.X1X2…Xn,X0=1,则代表-0.X1X2…Xn)。 即 (-1)^X0 * (X1*2^(-1)) + X2*2^(-2) + … + Xn-1*2^(-n+1) + Xn*2^(-n) 数值范围是 -(1-2^(-n))≤X≤1-2^(-n) 例如: 1111表示-0.875 (定点小数也被用在浮点数的尾数(Mantissa)部分)

2011-07-03 · 1 min · 42 words · -

整数

整数 整数 (Integer) : 像-2,-1,0,1,2这样的数称为整数。 (整数是表示物体个数的数,0表示有0个物体) 整数是人类能够掌握的最基本的数学工具。整数的全体构成整数集,整数集合是一个数环。在整数系中,自然数为0和正整数的统称,称0为零,称-1、-2、-3、…、-n、… (n为整数)为负整数。正整数、零与负整数构成整数系。 一个给定的整数n可以是负数 (n∈Z-) ,非负数 (n∈Z*) ,零 (n=0) 或正数 (n∈Z+) .

2011-07-03 · 1 min · 17 words · -

实数

实数 包括有理数和无理数。其中无理数就是无限不循环小数,有理数就包括整数和分数。数学上,实数直观地定义为和数轴上的点一一对应的数。本来实数仅称作数,后来引入了虚数概念,原本的数称作"实数"——意义是"实在的数"。

2011-07-03 · 1 min · 2 words · -

浮点数

浮点数 浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数 (即尾数) 乘以某个基数 (计算机中通常是2) 的整数次幂得到,这种表示方法类似于基数为10的科学记数法。 浮点计算: 是指浮点数参与的运算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。 一个浮点数a由两个数m和e来表示: a = m × b^e。在任意一个这样的系统中,我们选择一个基数b (记数系统的基) 和精度p (即使用多少位来存储) 。m (即尾数) 是形如±d.ddd…ddd的p位数 (每一位是一个介于0到b-1之间的整数,包括0和b-1) 。如果m的第一位是非0整数,m称作规格化的。有一些描述使用一个单独的符号位 (s 代表+或者-) 来表示正负,这样m必须是正的。e是指数。 浮点表示法: 把数的范围和精度分别表示的方法,相当于数的小数点的位置随比例因子的不同而在一定范围内可以自由浮动。 阶码: 浮点数编码中,表示小数点的位置的代码。 尾数: 浮点数据编码中,表示数据有效值的代码。 基数: 浮点数据编码中,对阶码所代表的指数值的数据,在计算机中是一个常数,不用代码表示。 定点数是小数点固定的数。在计算机中没有专门表示小数点的位,小数点的位置是约定默认的。一般固定在机器数的最低位之后,或是固定在符号位之后。前者称为定点纯整数,后者称为定点纯小数。 浮点数的表示范围: 最常用的32位规格化浮点数的表示范围是: 前提条件:阶码用移码表示,尾数用补码表示,每1位是符号位,阶码占8位,尾数占23位 可表示的最大正数:(1-2^-23)*2^127 最小正数:2^-129 最大负数:-2^-129 目前多数系统都按照IEEE-754标准来规定浮点数的存储格式。IEEE754规定,单精度浮点数用4字节存储,双精度浮点数用8字节存储,分为三个部分: 符号位、阶码和尾数。阶码即指数,尾数即有效小数位数。单精度格式阶码占8位,尾数占24位,符号位1位,双精度则为11位阶码,53位尾数和1位符号位, 显然差别就出来了。即使都是4字节存储的单精度浮点数,还有不使用IEEE754标准的,我记得字长32位的大型IBM系列机就是1位符号位,24位尾数,7位阶码,基数16,而不是2,与此标准不同。所以浮点数的表示范围依赖的因素较多较复杂,主要取决于表示一个浮点数所用的字节数和阶码的大小与长度。说法不一样,但应该都是有根据的。 最小负数:-2^127 规格化表示 java中的浮点数采用的事IEEE Standard 754 Floating Point Numbers标准,该标准的规范可以参考http://blog.csdn.net/treeroot/articles/94752.aspx. float占用4个字节,和int是一样,也就是32bit. 第1个bit表示符号,0表示正数,1表示负数,这个很好理解,不用多管. 第2-9个bit表示指数,一共8为(可以表示0-255),这里的底数是2,为了同时表示正数和负数,这里要减去127的偏移量.这样的话范围就是(-127到128),另外全0和全1作为特殊处理,所以直接表示-126到127. 剩下的23位表示小数部分,这里23位表示了24位的数字,因为有一个默认的前导1(只有二进制才有这个特性). 最后结果是:(-1)^(sign) * 1.f * 2^(exponent) 这里:sign是符号位,f是23bit的小数部分,exponent是指数部分,最后表示范围是(因为正负数是对称的,这里只关心正数) 2^(-126) ~~ 2(1-2^(-24)) * 2^127 这个还不是float的取值范围,因为标准中还规定了非规格化表示法,另外还有一些特殊规定. 非规格化表示: 当指数部分全0而且小数部分不全0时表示的是非规格化的浮点数,因为这里默认没有前导1,而是0. ...

2011-07-03 · 1 min · 87 words · -

有理数

有理数 有理数是整数和分数的统称,一切有理数都可以化成分数的形式。 有理数可分为整数和分数也可分为正有理数,0,负有理数。除了无限不循环小数以外的实数统称有理数。

2011-07-02 · 1 min · 3 words · -