zoukankan      html  css  js  c++  java
  • 读CSAPP第二章的收获

    一:
    一道很有意思的位运算题目:
    你只有两种操作
    bis(x, y): 在y为1的每个位置上,将x的对应的位设为1
    bic(x, y): 在y为1的每个位置上,将x的对应的位设为0

    简单的化简一下
    bis(x, y): return x | y;
    bic(x, y): return x & ~y;

    任务:实现XOR运算
    异或就意味着 一边为1 一边为0。所以答案就是
    bis(bic(x, y), bic(y, x));

    二:
    对补码有了新的理解,由于这里写公式不是很方便就不贴了(见书P45
    B2T(Binary to Two's-complement)向整数的映射,就是最高位的权重取负数再求和
    e.g.
    B2T([1011]) = -1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = -8+0+2+1 = -5
    这个就更直观的解释了:
    补码表示的整数范围的最小值是-2^(w-1), 最大值是2^(w-1)-1
    例如长度为4位的位模式TMin([1000])=-8, TMax([0111])=7

    几乎所有的现代机器都使用补码表示有符号整数

    三:
    在C/C++中,无符号数和有符号数比较会产生意想不到的效果。
    因为有符号数是用补码表示的,当无符号数和有符号数同时比较的时候,有符号数会被隐式的强制转换为无符号数
    e.g. -1 > 0u 是true

    四:
    截断数字:减少表示数字的位数。
    公式见P57
    简单的来说就是,把数字的二进制形式直接减少,不用做别的处理
    e.g.

    int main()
    {
        int x = 53191;
        short sx = (short) x;
        cout << sx << endl;
        int y = sx;
        cout << y << endl;
        return 0;
    }


    结果是
    -12345
    -12345

  • 相关阅读:
    莫比乌斯反演
    CDQ 分治
    二分图的最大匹配、完美匹配和匈牙利算法
    网络流简介
    BSGS && EXBSGS
    fhq-treap
    炸鱼w咕咕咕
    路由器配置——静态路由
    路由器配置——静态路由-回环地址测试
    路由器配置——单臂路由实现VLAN间通信
  • 原文地址:https://www.cnblogs.com/liangyongrui/p/6272941.html
Copyright © 2011-2022 走看看