免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 833 | 回复: 0

Type of computer data and related concepts [复制链接]

论坛徽章:
0
发表于 2011-12-22 08:51 |显示全部楼层
                                             计算机中数据和类型相关概念(小小总结,不太行)
1. 能执行程序的计算机和能运算的计算机的区别
 1.1 执行程序的计算机必须支持相应的文件格式(ELF)
 1.2 能运算的计算机是不需要操作系统的(计算机的本质就是运算)
 1.3 而能执行程序的计算机不仅需要操作系统,而且需要编译器,需要硬盘....

2. 计算机的数学运算都是通过逻辑运算来实现的。
 比如 加法都是用异或 ,乘法和除法是通过移位, 还有一些位运算(在arm汇编的时候,位运算显得很重要,因为要对寄存器的某个位进行操作)

 2.1 既然加法是通过异或来实现的,那么加法器的逻辑门电路相对就好理解了。(似乎根据真值表好点)
   2.1.1 首先不考虑进位,那么要得到结果,那么只要A 和 B 异或就得到 C
   2.1.1 其次考虑进位, 那么只要再加上进位,即 C 和 Cin 异或就好了,这是第二个考虑
   2.1.2 现在考虑进位输出,首先 A 和 B 的结果与(得到S1),输出 1 或者 0 就能看出本身是否有进位,当然这还不能作为进位输出,因为还有Cin。 现在考虑有Cin的情况,如果将S1 直接或,看上去满足,其实当A B 为 0 而,Cin为1 时不满足了,所以经cin先与 C 与了以后,在跟 S1 或就OK 了,可能这样还不是很清晰。
   2.1.3 当然这还不是一个完整的,因为还有一个溢出的东西没考虑。
 
3. 补码(缺乏练习)
  3.1 进制之间的转换,练熟就好了。不然很不爽的。
  3.2 用补码比较好,0 的表示就唯一了,只有正0。(补码的表示为 整数取反加1, 这样看来的话,00...取反加1还是 0 ,所以只有正0)
  3.3 其实给你一个数,比如1111111 问你是多少,你一看只要加上1,为0了,那么好的,就是-1了,其他类似。10000000这个数只要加上100000000就为0了,所以是-128。还是挺好算的,整数就是本身啦。然后范围的问题也就明白多了,8位数范围 -128 -> 0 -> 127 -> ,呵呵,确实要好好理解。这些东西其实挺有用的。
  3.4 小技巧,意思不大
   如是0xFFFFFFFF   -1  // 0xFFFFFFFFF + 1 == 0, so it's -1
      0xFFFFFFFE   -2
      0xFFFFFFFD    -3
      0xFFFFFFFC    -4  其实还有一个技巧就是,C是12(remember),加上4就是16, so it's -4
      0xFFFFFFFB    -5
      0xFFFFFFFA    -6
      0xFFFFFFAB    -(0x55) 这里可以这样的,B + 5 == 16, A + B's进位 + 5 == 16 ,so it's 55

4. 位操作。
   4.1 设置某位,比如第17位(set_bit)和get_bit: 首先定义一个掩码 int umask = 1 << 17 (左移17位)
     4.1.1 set_bit 为0
    num = num & (~umask)
     4.1.2 set_bit 为1
    num = num || umask
     4.1.3 get_bit 17, return (1 || 0)
        temp = num & umask
        return temp;
  4.2 统计1的个数
     这个只要一个变量保存最低为的值,判断是1,计数器就加1,然后在对该数移位操作,然后在保存,然后在判断。while循环条件就是该值移位为0为止,当然这只是适用于找1的个数。(0就是相反个数吗??)
  4.3 循环移位的实现(假设是32位的整数)
    int umask = 1 << 31;
     思路:1. 设置一个int temp用来保存int number的最低伪 temp = number & 1, number = number >> 1;
          2. 根据temp的值是1 还是 0 来给第31位赋值,如果是1:number = number || umask;
                           如果是0:number = number & (~umask);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP