美文网首页
信息的表示和处理

信息的表示和处理

作者: 老杜振熙 | 来源:发表于2020-10-07 15:47 被阅读0次

    在阅读《深入理解计算机系统》的过程之中,有一些知识点是我觉得有必要记录下来的,在这里进行一定的总结。


    1. 文本数据比二进制数据具有更好的平台独立性

      文本数据VS二进制数据.png
      一个简单的数字,比如说int num = 18;在内存中存储的形式会因为大端法小端法两种形式而有所不同。因此,如果采用二进制格式存储(直接将内存中的存储格式复制到磁盘上),那么就会因为不同的机器而产生不同。相反,文本数据会将数据进行编码后再存储,因此独立性更好。
    2. 理解异或
      ^如何和|联系起来呢?其实很简单,先将两个操作数中同为1的比特位都置为0,然后再对其进行|操作即可;利用这个思路,我们可以使用bis(位设置)和bic(位清除)两个函数来实现异或操作。

    3. 补码的二进制
      对于补码的二进制而言,最需要注意的就是:最高位为负权。这也就解释了为什么10000000代表了8位signed integer的最小值-128,而11111111代表的是-1。

    4. 算数右移和逻辑右移
      算数右移唯一的区别是:当对有符号类型的负数进行位右移时,高位补1;这样会带来一些更直观的结果,比如说对于8位signed integer而言,当其为-128,对应二进制为10000000时,如果是算数右移,将得到二级制形式11000000,翻译为十进制则是-64,恰好符合直观感受。但如果是逻辑右移,就会使负数变为正数。

    5. 无符号数
      无符号数有一些奇怪的特性。比如unsigned a = 1, b = 2;那么当a-b时结果不会是负数,相反,结果会变成一个很大的正数。原因则是无符号数不判断溢出,它直接进行取模,也就是说:a-b == (int)a-(int)b+pow(2, w),w为变量的位数。-(int)b+pow(2, w)也称为b的逆元。

    6. 小技巧
      -x == ~x+1
      x & (-x) // 只保留x最右侧的1,其他全部清为0;
      x & (x-1) // 清除x最右侧的1

    相关文章

      网友评论

          本文标题:信息的表示和处理

          本文链接:https://www.haomeiwen.com/subject/lkvfpktx.html