1、int变量的奇偶性(变量A)
    A&1 = 0 (偶数)
    A&1 = 1 (奇数)

    2、int变量第K位的操作。(变量A)
    (A>>K)&1 (比特位)
    A=A|(1<A=A&~(1<3、两整数的平均值(变量A、B)
    (A & B) + ( (A ^ B) >> 1)

    4、是否为2的整数次幂(变量A)
    (x != 0) && (A & (A - 1)) == 0)
    5、两整型变量的交换(变量A、B)
    B ^=A;
    A ^= B;
    B ^= A;
    6、计算整数的绝对值(变量A)
    ( (A ^ (A>>31)) - (A>>31) );

    7、求相反数(变量A)
    ~A + 1

    8、实现整数的加减乘除
    点击打开链接

    1. #include <stdio.h>
    2. #include <limits.h>
    3. //加法运算
    4. int add(int a, int b)
    5. {
    6. return b==0 ? a: add(a^b,(a&b)<<1);
    7. }
    8. //补码中正数转负数的原理
    9. int negative(int a)
    10. {
    11. return add(1,~a);
    12. }
    13. //减法运算
    14. int sub(int a,int b)
    15. {
    16. return add(a,negative(b));
    17. }
    18. //判断正负
    19. bool isNegative(int a)
    20. {
    21. return (a&INT_MIN)!=0; //INT_MIN只有最高位为1,其余位为0
    22. }
    23. //仅计算正数乘法
    24. int multi_help(int a,int b)
    25. {
    26. int result= 0;
    27. while(b)
    28. {
    29. if(b&1) result = add(result, a);
    30. a <<=1;
    31. b >>= 1;
    32. }
    33. return result;
    34. }
    35. //乘法
    36. int multi(int a,int b)
    37. {
    38. if(isNegative(a))
    39. {
    40. if(isNegative(b))
    41. return multi_help(negative(a),negative(b));
    42. else
    43. return negative(multi_help(negative(a),b));
    44. }
    45. else
    46. {
    47. if(isNegative(b))
    48. return negative(multi_help(a,negative(b)));
    49. else
    50. return multi_help(a,b);
    51. }
    52. }
    53. //仅计算正数除法
    54. int div_help(int a,int b)
    55. {
    56. if(a<b) return 0;
    57. if(a==b) return 1;
    58. int result=0;
    59. //第32位为符号位,所以从第31位开始
    60. for(int i=30;i>=0;i--)
    61. {
    62. if((a>>i)>=b)
    63. {
    64. result=add(result,1<<i);
    65. a=sub(a,b<<i);
    66. }
    67. }
    68. return result;
    69. }
    70. //除法
    71. int div(int a,int b)
    72. {
    73. if(isNegative(a))
    74. {
    75. if(isNegative(b))
    76. return div_help(negative(a),negative(b));
    77. else
    78. return negative(div_help(negative(a),b));
    79. }
    80. else
    81. {
    82. if(isNegative(b))
    83. return negative(div_help(a,negative(b)));
    84. else
    85. return div_help(a,b);
    86. }
    87. }
    88. int main(void)
    89. {
    90. int a,b;
    91. a=-30;
    92. b=-5;
    93. printf("ADD:%d,SUB:%d,MULTI:%d,DIV:%d",add(a,b),sub(a,b),multi(a,b),div(a,b));
    94. return 0;
    95. }