随笔-204  评论-90  文章-8  trackbacks-0
 

摘自:http://edu.codepub.com/2009/0929/15909.php
应用举例
(1) 判断int型变量a是奇数还是偶数           
a&1  = 0 偶数
      a&1 =  1 奇数
(2) 取int型变量a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1
(3) 将int型变量a的第k位清0,即a=a&~(1 < <k)
(4) 将int型变量a的第k位置1, 即a=a ¦(1 < <k)
(5) int型变量循环左移k次,即a=a < <k ¦a>>16-k  (设sizeof(int)=16)
(6) int型变量a循环右移k次,即a=a>>k ¦a < <16-k  (设sizeof(int)=16)
(7)整数的平均值
对于两个整数x,y,如果用 (x+y)/2 求平均值,会产生溢出,因为 x+y 可能会大于INT_MAX,但是我们知道它们的平均值是肯定不会溢出的,我们用如下算法:
int average(int x, int y)  //返回X,Y 的平均值
{   
    return (x&y)+((x^y)>>1);
}
(8)判断一个整数是不是2的幂,对于一个数 x >= 0,判断他是不是2的幂
boolean power2(int x)
{
    return ((x&(x-1))==0)&&(x!=0);
}
(9)不用temp交换两个整数
void swap(int x , int y)
{
    x ^= y;
    y ^= x;
    x ^= y;
}
(10)计算绝对值
int abs( int x )
{
int y ;
y = x >> 31 ;
return (x^y)-y ;        //or: (x+y)^y
}
(11)取模运算转化成位运算 (在不产生溢出的情况下)
        a % (2^n) 等价于 a & (2^n - 1)
(12)乘法运算转化成位运算 (在不产生溢出的情况下)
        a * (2^n) 等价于 a < < n
(13)除法运算转化成位运算 (在不产生溢出的情况下)
        a / (2^n) 等价于 a>> n
        例: 12/8 == 12>>3
(14) a % 2 等价于 a & 1       
(15) if (x == a) x= b;
            else x= a;
        等价于 x= a ^ b ^ x;
(16) x 的 相反数 表示为 (~x+1)


实例

    功能              ¦          示例            ¦    位运算
----------------------+---------------------------+--------------------
去掉最后一位          ¦ (101101->10110)          ¦ x >> 1
在最后加一个0        ¦ (101101->1011010)        ¦ x < < 1
在最后加一个1        ¦ (101101->1011011)        ¦ x < < 1+1
把最后一位变成1      ¦ (101100->101101)          ¦ x ¦ 1
把最后一位变成0      ¦ (101101->101100)          ¦ x ¦ 1-1
最后一位取反          ¦ (101101->101100)          ¦ x ^ 1
把右数第k位变成1      ¦ (101001->101101,k=3)      ¦ x ¦ (1 < < (k-1))
把右数第k位变成0      ¦ (101101->101001,k=3)      ¦ x & ~ (1 < < (k-1))
右数第k位取反        ¦ (101001->101101,k=3)      ¦ x ^ (1 < < (k-1))
取末三位              ¦ (1101101->101)            ¦ x & 7
取末k位              ¦ (1101101->1101,k=5)      ¦ x & ((1 < < k)-1)

取右数第k位          ¦ (1101101->1,k=4)          ¦ x >> (k-1) & 1

把末k位变成1          ¦ (101001->101111,k=4)      ¦ x ¦ (1 < < k-1)
末k位取反            ¦ (101001->100110,k=4)      ¦ x ^ (1 < < k-1)
把右边连续的1变成0    ¦ (100101111->100100000)    ¦ x & (x+1)
把右起第一个0变成1    ¦ (100101111->100111111)    ¦ x ¦ (x+1)
把右边连续的0变成1    ¦ (11011000->11011111)      ¦ x ¦ (x-1)
取右边连续的1        ¦ (100101111->1111)        ¦ (x ^ (x+1)) >> 1
去掉右起第一个1的左边 ¦ (100101000->1000)        ¦ x & (x ^ (x-1))
判断奇数      (x&1)==1
判断偶数 (x&1)==0       

例如求从x位(高)到y位(低)间共有多少个1

public static int FindChessNum(int x, int y, ushort k)
        {
            int re = 0;
            for (int i = y; i <= x; i++)
            {
                re += ((k >> (i - 1)) & 1);
            }
            return re;
        }

posted @ 2010-10-29 12:21 一凡 阅读(1459) | 评论 (0)编辑 收藏

目录结构:com/test/JniTest.java

package : com.test

javac com/test/JniTest.java

javah -classpath ./ -jni com.test.JniTest

在当前目录下生成:
com_test_JniTest.h

posted @ 2010-10-27 12:17 一凡 阅读(330) | 评论 (0)编辑 收藏

方法一:

        进入MySQL安装目录 打开MySQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 ,服务里重起MySQL即可
        注意:如果新增max_connections,必须放在mysqld下,如:       

  [mysqld]
  max_connections
=300

方法二:
        登录至数据库,执行以下命令:      

set GLOBAL max_connections=500;
show variables 
like 'max_con%';
posted @ 2010-09-16 14:08 一凡 阅读(241) | 评论 (0)编辑 收藏

需求:广告按权重展现

基本算法描述如下:
1、每个广告增加权重
2、将所有匹配广告的权重相加sum,
3、以相加结果为随机数的种子,生成1~sum之间的随机数rd
4、.接着遍历所有广告,访问顺序可以随意.将当前节点的权重值加上前面访问的各节点权重值得curWt,判断curWt >=  rd,如果条件成立则返回当前节点,如果不是则继续累加下一节点. 直到符合上面的条件,由于rd<=sum 因此一定存在curWt>=rd。
特别说明:
        此算法和广告的顺序无关

测试代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class Test {

    
/**
     * 
@param args
     
*/

    @SuppressWarnings(
"unchecked")
    
public static void main(String[] args) {
        
        List
<Node> arrNodes = new ArrayList<Node>();
        Node n 
= new Node(10"测试1");
        arrNodes.add(n);
        n 
= new Node(20"测试2");
        arrNodes.add(n);
        n 
= new Node(30"测试3");
        arrNodes.add(n);
        n 
= new Node(40"测试4");
        arrNodes.add(n);
        
        
//Collections.sort(arrNodes, new Node());
        Map<String, Integer> showMap = null;
        
int sum = getSum(arrNodes);
        
int random = 0;
        Node kw 
= null;
        
for(int k = 0; k < 20; k++{
            showMap 
= new LinkedHashMap<String, Integer>();
            
for(int i = 0; i < 100; i++{
                random 
= getRandom(sum);
                kw 
= getKW(arrNodes, random);
                
if(showMap.containsKey(kw.kw)) {
                    showMap.put(kw.kw, showMap.get(kw.kw) 
+ 1);
                }
 else {
                    showMap.put(kw.kw, 
1);
                }

                
//System.out.println(i + " " +random + " " + getKW(arrNodes, random));
            }

            System.out.print(k 
+ " ");
            System.out.println(showMap);
        }

    }

    
    
public static Node getKW(List<Node> nodes, int rd) {
        Node ret 
= null;
        
int curWt = 0;
        
for(Node n : nodes){
            curWt 
+= n.weight;
            
if(curWt >= rd) {
                ret 
= n;
                
break;
            }

        }

        
return ret;
    }

    
public static int getSum(List<Node> nodes) {
        
int sum = 0;
        
for(Node n : nodes)
            sum 
+= n.weight;
        
return sum;
    }

    
public static int getRandom(int seed) {
        
return (int)Math.round(Math.random() * seed);
    }

}

class Node implements Comparator{
    
int weight = 0;
    String kw 
= "";
    
    
public Node() {}
    
    
public Node(int wt, String kw) {
        
this.weight = wt;
        
this.kw = kw;
    }

    
public String toString(){
        StringBuilder sbBuilder 
= new StringBuilder();
        sbBuilder.append(
" weight=").append(weight);
        sbBuilder.append(
" kw").append(kw);
        
return sbBuilder.toString();
    }

    
public int compare(Object o1, Object o2) {
        Node n1 
= (Node)o1;
        Node n2 
= (Node)o2;
        
if(n1.weight > n2.weight)
            
return 1;
        
else 
            
return 0;
    }

}
posted @ 2010-08-31 17:08 一凡 阅读(3379) | 评论 (0)编辑 收藏
#!/bin/bash

MYSQL_HOME
="/home/work/local/mysql5"
MYSQL_SRC_HOME
="mysql-5.1.38"

cd 
$MYSQL_SRC_HOME
make clean
./configure \
--prefix=$MYSQL_HOME \
--with-tcp-port=3308 \
--enable-thread-safe-client \
--enable-local-infile \
--with-unix-socket-path=$MYSQL_HOME/mysql.sock \
--with-charset=gbk \
--with-innodb \
--with-extra-charsets=gbk,utf8,ascii,big5,latin1 \
--enable-static \
--enable-assemble

make
make install

cd 
$MYSQL_HOME
cp 
./share/mysql/my-huge.cnf ./my.cnf

./bin/mysql_install_db
./bin/mysqld_safe &

posted @ 2010-08-30 16:43 一凡 阅读(218) | 评论 (0)编辑 收藏

设计与开发应用服务器(一)------常见模式:http://blog.csdn.net/cutesource/archive/2010/08/02/5783213.aspx

posted @ 2010-08-30 14:41 一凡 阅读(154) | 评论 (0)编辑 收藏
分布式设计与开发http://www.javaeye.com/topic/748178
posted @ 2010-08-30 14:40 一凡 阅读(127) | 评论 (0)编辑 收藏

构建高性能web之路------mysql读写分离实战


 

posted @ 2010-08-30 14:33 一凡 阅读(174) | 评论 (0)编辑 收藏

摘自:http://hi.baidu.com/zhouqleilo/blog/item/f76297127ed0c9085aaf5330.html

经常使用的正则表达式

^                                 行首

$                                 行尾

.            任意一个字符

*            任意多个字符

\            转义字符

^ [ t h e ]                      t h e开头行

[ S s ] i g n a [ l L ]              匹配单词s i g n a ls i g n a LS i g n a lS i g n a L

[Ss]igna[lL]".                同上,但加一句点

[ m a y M A Y ]             包含m a y大写或小写字母的行

^ U S E R $                  只包含U S E R的行

[tty]$                           t t y结尾的行

\ .                                带句点的行

^ d . . x . . x . . x          对用户、用户组及其他用户组成员有可执行权限的目录

^ [ ^ l ]                        排除关联目录的目录列表

^[^d]                ls –l | grep ^[^d] 只显示非文件夹的文件         

[ . * 0 ]                       0之前或之后加任意字符

[ 0 0 0 * ]                  0 0 0或更多个

[ iI]                             大写或小写I

[ i I ] [ n N ]                大写或小写in

[ ^ $ ]                         空行

[ ^ . * $ ]                     匹配行中任意字符串

^ . . . . . . $                  包括6个字符的行

[a- zA-Z]                     任意单字符

[ a - z ] [ a - z ] *         至少一个小写字母

[ ^ 0 - 9 " $ ]                非数字或美元标识

[ ^ 0 - 0 A - Z a - z ]     非数字或字母

[ 1 2 3 ]                       13中一个数字

[ D d ] e v i c e            单词d e v i c eD e v i c e

D e . . c e                    前两个字母为D e,后跟两个任意字符, 最后为c e

" ^ q                            ^ q开始行

^ . $                            仅有一个字符的行

^".[0-9][0-9]                以一个句点和两个数字开始的行

' " D e v i c e " '            单词d e v i c e

D e [ V v ] i c e \ .               单词D e v i c ed e v i c e

([0-9]{2}/[a-zA-Z]{3}/[0-9]{4})      对 日期格式08/Jun/2010

([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) I P地址格式

[ ^ . * $ ]                     匹配任意行

[A-Za-z]*            匹配所有单词

功能说明:查找文件里符合条件的字符串。

语  法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] [-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

补充说明:grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。

参  数:
   -a或--text    不要忽略二进制的数据。
   -A<显示列数>或--after-context=<显示列数>    除了显示符合范本样式的那一列之外,并显示该列之后的内容。
   -b或--byte-offset    在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。
   -B<显示列数>或--before-context=<显示列数>    除了显示符合范本样式的那一列之外,并显示该列之前的内容。
   -c或--count    计算符合范本样式的列数。
   -C<显示列数>或--context=<显示列数>或-<显示列数>    除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
   -d<进行动作>或--directories=<进行动作>    当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
   -e<范本样式>或--regexp=<范本样式>    指定字符串做为查找文件内容的范本样式。
   -E或--extended-regexp    将范本样式为延伸的普通表示法来使用。
   -f<范本文件>或--file=<范本文件>    指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。
   -F或--fixed-regexp    将范本样式视为固定字符串的列表。
   -G或--basic-regexp    将范本样式视为普通的表示法来使用。
   -h或--no-filename    在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
   -H或--with-filename    在显示符合范本样式的那一列之前,表示该列所属的文件名称。
   -i或--ignore-case    忽略字符大小写的差别。
   -l或--file-with-matches    列出文件内容符合指定的范本样式的文件名称。
   -L或--files-without-match    列出文件内容不符合指定的范本样式的文件名称。
   -n或--line-number    在显示符合范本样式的那一列之前,标示出该列的列数编号。
   -q或--quiet或--silent    不显示任何信息。
   -r或--recursive    此参数的效果和指定“-d recurse”参数相同。
   -s或--no-messages    不显示错误信息。
   -v或--revert-match    反转查找。
   -V或--version    显示版本信息。
   -w或--word-regexp    只显示全字符合的列。
   -x或--line-regexp    只显示全列符合的列。
   -y    此参数的效果和指定“-i”参数相同。
   --help    在线帮助。

posted @ 2010-07-15 19:40 一凡 阅读(736) | 评论 (0)编辑 收藏
摘自:http://learn.akae.cn/media/ch03s03.html

Man Page

Man Page是Linux开发最常用的参考手册,由很多页面组成,每个页面描述一个主题,这些页面被组织成若干个Section。FHS(Filesystem Hierarchy Standard)标准规定了Man Page各Section的含义如下:

表 3.1. Man Page的Section

Section 描述
1 用户命令,例如ls(1)
2 系统调用,例如_exit(2)
3 库函数,例如printf(3)
4 特殊文件,例如null(4)描述了设备文件/dev/null/dev/zero的作用
5 系统配置文件的格式,例如passwd(5)描述了系统配置文件/etc/passwd的格式
6 游戏
7 其它杂项,例如bash-builtins(7)描述了bash的各种内建命令
8 系统管理命令,例如ifconfig(8)

注意区分用户命令和系统管理命令,用户命令通常位于/bin/usr/bin目录,系统管理命令通常位于/sbin/usr/sbin目录,一般用户可以执行用户命令,而执行系统管理命令经常需要root权限。系统调用和库函数的区别将在第 2 节 “main函数和启动例程”说明。

Man Page中有些页面有重名,比如敲man printf命令看到的并不是C函数printf,而是位于第1个Section的系统命令printf,要查看位于第3个Section的printf函数应该敲man 3 printf,也可以敲man -k printf命令搜索哪些页面的主题包含printf关键字。本书会经常出现类似printf(3)这样的写法,括号中的3表示Man Page的第3个Section,或者表示“我这里想说的是printf库函数而不是printf命令”。

posted @ 2010-06-21 15:20 一凡 阅读(389) | 评论 (0)编辑 收藏
仅列出标题
共21页: First 上一页 3 4 5 6 7 8 9 10 11 下一页 Last