今天终于找到了一个方法,就是使用xclip。首先安装xclip:
sudo apt-get install xclip
然后下载xclip.el,看名字好像是国内的牛人的作品。在.emacs文件中添加以下语句即可。
(require 'xclip) (xclip-mode 1)
sudo apt-get install xclip
(require 'xclip) (xclip-mode 1)
foo(const char **p) {} main(int argc, char ** argv){ foo(arvg); }(2)
char *cp; const char *ccp; ccp = cp;例子(1)将提示警告“参数与原型不匹配”,例子(2)却是合法的。问题的症结在于“左边指针所指向的类型必须具有右边指针所指向类型的全部限定词”。按照这个规则,例子(2)因此是合法的。但例子(1)仍然不合法,因为指针p指向的是 const char*, 指针argv指向的是char*,这是两个不同的指针类型。
main(){ if(-1 < (unsigned char) 1) printf("-1 is less than (unsigned char)1 : ANSI semantics "); else printf("-1 NOT less than (unsigned char) 1: K&R semantics "); }-1的位模式是一样的,但是在K&R C 中,编译器将其解释为无符号数,也就是变成正数,所以“NOT less”。
int array[] = {23,34,12,17,204,99,16}; #define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0])) main(){ int d = -1,x; /*...*/ if(d <= TOTAL_ELEMENTS - 2) x = array[d+1]; /*...*/ }
int main(int argc, char *argv[]) { switch(4){ int i = 3; case 1: printf("1\n");break; case 2: printf("2\n");break; case 3: printf("3\n");break; case 4: printf("4 %d\n",i);break; default: printf("default\n");break; } return 0; }程序将输出“4 0”(在我的机器上是输出0,实际上可能是任意值)。原因就在于switch语句直接跳到匹配位置的case处开始执行,所有的初始化并不会被执行。变量i是有定义的,i的可见范围为switch语句块,变量的声明是在编译期就可见,而初始化要等到运行时。可以说case语句就相当于goto。
x = f() + g()*h()上面的代码唯一可以确定的是乘法会在加法之前执行。但是操作数f(),g(),h()会以什么顺序执行并没有规定,可能f()会在乘法之前调用也可能在乘法之后调用,也可能在g()和h()之间调用。
printf("%d %d\n",++n,power(2,n));也认为上面代码是一种不良风格的代码,因为在不同的编译器中可能会得到不同的结果。
z = y+++x;将被理解为,而且只能被理解为
z = y++ + x;但这种策略也会再次让人迷糊,比如,
z = y+++++x;按照ANSI C 的策略,将被解析为,
z = y++ ++ +x;所以会编译错误。虽然当理解做 z = y++ + ++x 时貌似是可行的,但按照策略,编译器并不会这么理解。
ratio = *x/*y;2012-06-20 22:27:47 回应
static unsigned short stopwatch[] = { 0x07C6, 0x1FF7, 0x383B, 0x600C, 0xC006, 0xC006, 0xDF06, 0xC106, 0xC106, 0x610C, 0x610C, 0x3838, 0x1FF0, 0x07C0, 0x0000 };正如所看到的那样,这些C语言常量并未提供有关图形实际模样的任何线索。这里有一个惊人的#define 定义的优雅集合,运行程序建立常量使它们看上去像是屏幕上的图形。
#define X )*2+1 #define _ )*2 #define s ((((((((((((((((0 /* 用于建立16位宽的图形 */ static unsigned short stopwatch[] = { s _ _ _ _ _ X X X X X _ _ _ X X _, s _ _ _ X X X X X X X X X _ X X X, s _ _ X X X _ _ _ _ _ X X X _ X X, s _ X X _ _ _ _ _ _ _ _ _ X X _ _, s _ X X _ _ _ _ _ _ _ _ _ X X _ _, s X X _ _ _ _ _ _ _ _ _ _ _ X X _, s X X _ _ _ _ _ _ _ _ _ _ _ X X _, s X X _ X X X X X _ _ _ _ _ X X _, s X X _ _ _ _ _ X _ _ _ _ _ X X _, s X X _ _ _ _ _ X _ _ _ _ _ X X _, s _ X _ _ _ _ _ X _ _ _ _ X X _ _, s _ X _ _ _ _ _ X _ _ _ _ X X _ _, s _ _ X X X _ _ X _ _ X X X _ _ _, s _ _ _ X X X X X X X X X _ _ _ _, s _ _ _ _ _ X X X X X _ _ _ _ _ _, s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _, };千万不要忘了在绘图结束后清除这些宏定义,否则可能造成很大的麻烦。
printf("%d",sizeof 'A');
char a = 'A'; char b = 'B'; printf ( " the size of the result of a+b :%d " ,sizeof( a+b) );输出的结果也是 4(或许之前会认为应该输出1)。
char a = 'A'; char b = 'B'; printf ( " the size of the result of a++ :%d " ,sizeof( a++) );或许你会认为,按照整型提升输出为4. 但实际上输出为 1。原因不详。
#define ISUNSIGNED(a) (a >=0 && ~a >= 0)如果宏参数是类型时,可以这么做:
#define ISUNSIGNED(type) ((type)0 - 1 > 0)其实,前一个代码由于整型提升的存在,并不能正常工作,比如 unsigned short us = 1 ,对us进行测试时就会得到错误答案。
#define ISUNSIGNED(a) ( a >= 0 && (a=~a,a >= 0? (a=~a,1):(a=~a,0)))而对于第二个代码,我也觉得书上写得似乎有点不对,原因也在于整型提升,可以改为
#define ISUNSIGNED(type) ((type)- 1 > 0)你认为呢?
if((a == 0 && b == 0 && c == 0) || (a == 0 && b == 0 && c != 0) || (a == 0 && b != 0 && c == 0) || (a != 0 && b == 0 && c == 0)) { result = a+b+c; } else if(a != 0 && b != 0 && c != 0) { if((a%2 == 0 && b%2 == 0 && c%2 == 0) || (a%2 == 1 && b%2 == 1 && c%2 == 1)) result = 2; else result = 1; } else if((a == 0 && b != 0 && c != 0) || (a != 0 && b == 0 && c != 0) || (a != 0 && b != 0 && c == 0)) { if(a%2 == 0 && b%2 == 0 && c%2 == 0) result = 2; else result = 1; }
#include<iostream> #include<stdio.h> #include<string.h> using namespace std ; #define MAXN 100002 #define MAX 1000002 int n,a[MAXN],c[MAX] ; int main() { int runs ; scanf("%d",&runs) ; while(runs--) { scanf("%d",&n) ; for(int i = 0;i < n;i++) scanf("%d",&a[i]) ; long long ret = 1LL * n * (n - 1) / 2 ; memset(c,0,sizeof c) ; for(int i = 0;i < n;i++) { for(int j = a[i];j > 0;j -= j & -j) ret -= c[j] ; for(int j = a[i];j < MAX;j += j & -j) c[j]++ ; } cout << ret << endl ; } return 0 ; }
//求2^k int lowbit(int t) { return t & ( t ^ ( t - 1 ) ); } //求前n项和 int sum(int end) { int sum = 0; while(end > 0) { sum += in[end]; end -= lowbit(end); } return sum; } //增加某个元素的大小 void plus(int pos, int num) { while(pos <= n) { in[pos] += num; pos += lowbit(pos); } }
其他人我不清楚,对于我自己而言,发tweet的理由是基于以下几点考虑的:
一个很理想的场景是有个ios客户端,闷骚时就随手一tweet。虽然Twitter已有优秀的官方客户端,但在国内糟糕的网络环境下,就只能变成摆设。VPN我是考虑过的,但是懒得也舍不得购买。至于免费VPN,就没有找到好用的,tenacy VPN 得每次查询密码,刚开始想能克服,最终还是怕了这个麻烦。网上有教程说怎么在ios中装goagent,过程极为繁琐,看起来挺美,但我的itouch没有越狱,也不想越狱(好像已经说了好多次懒了,羞愧)。总之,就这么简单的需求也难有很好的解决方法。
忽然哪天灵光一闪,为什么不用email来发tweet呢?这篇博文介绍了使用twitterfeed.com + blogger 的方法来通过email发tweet。这是我现在采纳的方法,这个方法的优点就是可以方便的发tweet,不用担心vpn又登陆不上或是私有twitter api又被封的问题,而且相应的推文是发送的blogger的,这等于做了一个备份。缺点也很明显,就是完全没有了社交性,这对于我来说真不是问题,如果有强烈的社交互动需求的,那就要重新考虑考虑拉。
如果在google中搜“twitter email”,第一个链接是tweetymail这个服务。tweetymail看起来满不错的,可以通过邮件来回复等一定的社交性,更新twitter的速度比twitterfeed快,因为它是接收到邮件就更新,而twitterfeed是查看blogger rss的输出来相应地更新twitter。tweetymail让我不能忍受(主要是我的心里作祟)的地方有两点,让我放弃了使用这个服务:1. 免费用户每月发tweet有限额,不在于说限额是否满足自己需求(实际上100条是完全够的),而在于这样的限制让我挺不舒服的。 2. 免费用户的tweet都会在tweetymail上公开,应该是在它的服务器上有存档,这尤其令我难以接受。
twitterfeed + blogger 的方案也不是很完美,因为twitterfeed好像并不能作用在有图片的邮件,只能输出邮件中的文字而会忽略图片。还好这世上还有twitpic这个服务,它支持通过邮件来发送tweet,这时邮件必须有图片附件才会被twitpic转到twitter。所以这刚好与twitterfeed珠联璧合,相得益彰。
LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=解决:
LC_CTYPE="zh_CN.UTF-8"重启即可
#define mod 10000 void ex48(){ int n, k; unsigned int p2, p1, p0; unsigned int s2, s1, s0; unsigned int t2, t1, t0; // s = 0 s2 = s1 = s0 = 0; for( n=1 ; n<=1000 ; n++ ){ // p = 1 p2 = p1 = 0; p0 = 1; for( k=1 ; k<=n ; k<<=1 ); while( k>>=1 ){ // p *= p t0 = p0*p0; t1 = 2*p0*p1 + t0/mod; t2 = 2*p0*p2 + p1*p1 + t1/mod; p0 = t0%mod; p1 = t1%mod; p2 = t2%mod; if( n&k ){ // p *= n t0 = p0*n; t1 = p1*n + t0/mod; t2 = p2*n + t1/mod; p0 = t0%mod; p1 = t1%mod; p2 = t2%mod; } } // s += p t0 = p0+s0; t1 = p1+s1 + t0/mod; t2 = p2+s2 + t1/mod; s0 = t0%mod; s1 = t1%mod; s2 = t2%mod; } printf("ex48: %02d%04d%04d\n", s2%100, s1, s0); }