10 2011 档案

表达式"x=x&(x-1)
摘要:x = x & (x - 1)含义:这条语句执行一次,就会把x用二进制格式表示时的最右边的一个二进制1变为二进制0,因为x-1会将该位(x用二进制表示时最右边的一个二进制1)变为0;应用1:把一个整数用二进制表示时,其中二进制1的个数;int Func(int x){ int count = 0; while(x) { x = x & (x - 1); count++; } return count;};设x=9999,其二进制格式为: 10011100001111; 则count=8;思路:将x转化为二进制格式,统计一下含有的二进制1的个数;应用2:判断一个整数(x)是否是2 阅读全文

posted @ 2011-10-21 14:01 艾杏佛 阅读(1059) 评论(0) 推荐(0)

输出
摘要:一: #define ADD(p) {p++;(*p)++;} Add(int *p){p++;(*p)++;} int a[]={0,1,2}; int main() { int *p=a; ADD(p) ADD(p) printf("%d,%d,%d\n",a[0],a[1],a[2]); p=a; Add(p); Add(p); printf("%d,%d,%d\n",a[0],a[1],a[2]); } 输出是多少?输出:0,2,30,4,3二:void test(char *p){ p+=3; } int main() {char *p = & 阅读全文

posted @ 2011-10-21 11:33 艾杏佛 阅读(482) 评论(0) 推荐(0)

char str[] 和 char *str 的区别(zhuan)
摘要:char*get_str(void){charstr[]={"abcd"};returnstr;} char str[] = {"abcd"};定义了一个局部字符数组,尽管是数组,但它是一个局部变量,返回它的地址肯定是一个已经释放了的空间的地址。 此函数返回的是内部一个局部字符数组str的地址,且函数调用完毕后 此数组被销毁,所以你返回的指针也就指向一块被销毁的内存,这种写法是错误的。char*get_str(void){char*str={"abcd"};returnstr;} char* str = {"abcd&quo 阅读全文

posted @ 2011-10-21 11:30 艾杏佛 阅读(1592) 评论(0) 推荐(0)

数据类型对应字节数(转载)
摘要:一、程序运行平台不同的平台上对不同数据类型分配的字节数是不同的。个人对平台的理解是CPU+OS+Compiler,是因为:1、64位机器也可以装32位系统(x64装XP);2、32位机器上可以有16/32位的编译器(XP上有tc是16位的,其他常见的是32位的);3、即使是32位的编译器也可以弄出64位的integer来(int64)。以上这些是基于常见的wintel平台,加上我们可能很少机会接触的其它平台(其它的CPU和OS),所以个人认为所谓平台的概念是三者的组合。虽然三者的长度可以不一样,但显然相互配合(即长度相等,32位的CPU+32位的OS+32位的Compiler)发挥的能量最大。 阅读全文

posted @ 2011-10-14 15:26 艾杏佛 阅读(171) 评论(0) 推荐(0)

导航