该文章及后续文章均为阅读《C陷阱和缺陷》后的读数笔记,方便以后回顾
C陷阱和缺陷电子版图书下载地址:点击打开链接
第一章词法陷阱
1.1 = 不同于 ==
在C语言中,符号=作为赋值运算符,符号==作为比较运算符。一般而言,赋值运算相对比较运算出现得更频繁,因此字符数较少的符号=就被赋予更常用的含义——赋值操作。在编写程序的时候,注意不要将赋值操作写完比较相等的操作,也不要将比较操作写为赋值操作。
1.2 & 和 | 不同于 && 和 ||
在C语言中,&和|为按位运算符,它们对操作数的处理方式是将其视...
分类:
其他好文 时间:
2014-06-07 11:34:14
阅读次数:
243
Implement
pow(x,n).要点:1、注意n是正数还是负数2、当n是负数时,注意n最小值时的处理方法:INT_MIN的绝对值比INT_MAX大1;3、当n为0时,任何非零实数的0次方都是14、尽量使用移位运算来代替除法运算,加快算法执行的速度。5、x取值为0时,0的正数次幂是1,而负数次幂...
分类:
其他好文 时间:
2014-06-06 15:52:27
阅读次数:
274
或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0。
异或的性质:
1、交换律:a^b = b^a;
2、结合律:(a^b)^c = a^(b^c);
3、对于任意的a:a^a=0,a^0=a,a^(-1)=~a。
了解了上面这些,来看看这个,很重要,后面的程序都要用到这个结论:
对于任意的a,有a^b^c^...
分类:
其他好文 时间:
2014-06-03 03:19:56
阅读次数:
267
/*天下文章一大抄,你抄我抄大家抄,只是学习笔记,别介意
~>_>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。
按位右移。将一个运算量的各位(二进制表示)依次右移若干位,低位被移出,高位对无符号数补0,对有符号数要按...
分类:
其他好文 时间:
2014-06-01 12:14:52
阅读次数:
242
效果如下图:分析:用一个整数的二进制可以记录32状态00000000000000000000000000000000
>>=0从右往左保存这三个的状态:精品选中,第一位设置为1:00000000000000000000000000000001
>>=1新品选中,第一位设置为1:00000000000...
分类:
Web程序 时间:
2014-05-31 00:54:33
阅读次数:
414
位运算符是在数字底层(即表示数字的 32 个数位)进行操作的。位运算 NOT位运算 NOT
由否定号(~)表示,它是 ECMAScript 中为数不多的与二进制算术有关的运算符之一。位运算 NOT 是三步的处理过程:把运算数转换成 32
位数字把二进制数转换成它的二进制反码把二进制数转换成浮点数例如...
分类:
编程语言 时间:
2014-05-30 09:07:06
阅读次数:
366
写一个函数,求俩个整数之和,要求函数体内不得使用+、-、*、/
四则运算符合。看到题目,我们知道,现在只有位运算可以用了,那就用位运算吧。第一步:对2个数的每一位相加,但不进位,我们可以用异或运算完成。第二步:找到进位的位置,并计算进位的值,我们先用与运算可以找到位置,然后左移一位,得到进位的值(比...
分类:
其他好文 时间:
2014-05-28 00:01:28
阅读次数:
369
如果要交换a、b之间的值,一般的做法是:tmp=a;a=b;b=tmp;这种方法不得不使用一个临时变量。从网上学来一个方法,可以不用使用临时变量:a^=b^=a^=b;这样计算之后,就可以交换a、b值证明:首先:^
是 位运算 的一种: 异或 运算1^1=0;0^0=0;1^0=1;0^1=1;将a...
分类:
其他好文 时间:
2014-05-23 22:07:50
阅读次数:
285
找只出现一次的两个数
题目:
一个整型数组里除了两个数字只出现一次之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。...
分类:
其他好文 时间:
2014-05-22 13:43:26
阅读次数:
248
POJ 2773 Happy 2006
题目大意:
给定m,k,问你第K个与m互质的数是多少? 其中 m (1 <= m <= 1000000), K (1 <= K <= 100000000).
解题思路:
用位运算的容斥原理,计算 [1,x]与m互质的数的方法是:
假设 m的质因数为 a,b,c ,那么与m不互斥的数个数为 f(a)+f(b)+f(c)-f(ab)-f(ac)-fa(bc)+f(abc),f(t)的含义是 (1,x)有多少个数与t不互质,很明显f(t)=x/t,那么与m互...
分类:
移动开发 时间:
2014-05-20 13:50:30
阅读次数:
291