首页 > 代码库 > 1.5第三天
1.5第三天
下午好多干货啊~
之前意识到编码能力很弱,今天接着发现知识储备也不好╮(╯▽╰)╭
指针(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;
1.5第三天
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。