下午好多干货啊~
之前意识到编码能力很弱,今天接着发现知识储备也不好╮(╯▽╰)╭
指针(pointer)的涵义不完全都是指针变量,有时也指地址
函数名: pow
功 能: 指数函数(x的y次方)
用 法: double pow(double x, double y);
以0x开始的数据表示16进制
%x, %X 无符号以十六进制表示的整数
%0 无符号以八进制表示的整数
感受下负数(补码表示)的移位,-9:ffff fff7 -18:ffff ffee
展开二进制正是补码左移一位的效果。左移补0,右移补一
0异或任何数等于任何数本身
1异或任何数等于任何数取反
a^b=b^a(交换律) a^b^c=a^(b^c)=(a^b)^c(结合律) a^b^a=a^a^b=b
实现两个数的交换而不使用临时变量,如两个数为a=5(0101),b=7(0111), //a=a^b,b=b^a,a=a^b =>a=7,b=5 while(fflush(stdin),exp1)先执行清空,再判断是否进行循环 sizeof(...)是运算符 strlen(...)是函数,要在运行时才能计算。strlen只关心存储的数据内容,不关心空间的大小和类型。sizeof可以用类型做参数,strlen只能用char*做参数char str[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str); //而b=20;strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。
求两个只出现了一次的数 方法一:假设二个不同数值是a,b;那么 s = a^b; 然后求的s中第一次出现1的位置k,根据异或运算特性,第一次出现1的地方就是这二个数位有区别的地方,比如1001 0101 与 1100 0001 得到异或结果是0101 0100 .那么第一次出现1的地方是第三位,a的第三位是1而b是0 。 接着遍历数值,找出第三位是1的数值就异或,得到的结果就是其中一个数与其他出现二次的数求异或,因为出现二次的数异或得到为0所有最后结果就是所求其中一个数。最后s与该数求异或就得到另一个数。
方法二:“只有两个数出现一次”的情况:可以找到一种方法,将数组划分为两部分,且让这两个数分别在不同部分,这样每部分所有数的异或值,恰好分别等于这两个数。根据 +k位是否为1,将原数组分为两部分。
交换两个数:
法1.用个temp
reight = left - right;.........(相册有)
***************************未解决******************************三个只出现了一次的数:http://www.cppblog.com/flyinghearts/archive/2013/03/21/198695.html
法2.left = left + right;
right = left - right = (left + right )- right = left;
left = left - right = (left + right) - left = right;
时间: 2024-11-10 13:24:07