CSAPP chapter2 记录(bit_level_coding)
p_154
//5x/8
define MSB_BIT (~(~0U >> )) int mul5div8(int val)
{
int sign = (val & MSB_BIT) == MSB_BIT; //取符号位
int bias = ( + !sign) & ; int q = val >> ;
int r = val - (q << );
r = (r << ) + r + bias >> ; //向零取整
q = (q << ) + q + r; return q;
}
//整数绝对值
unsigned int abs(int val)
{
int temp = val >> ;
return (val ^ temp) - temp;
} unsigned int abs(unsigned val)
{
unsigned int sign = val >> 31;
return (val ^ (0 - sign)) + sign;
}
对于X86与mips,上一指令更少
对于ARM,下一指令更少
//将字节的最高位视为符号位,向左扩展
unsigned int extbyte_leftmost_one(unsigned char val)
{
unsigned temp = val;
return ((temp + 0X80) & 0XFF) - 0X80;
}
//是否含有偶数个1
unsigned int even_ones(unsigned int val)
{
val ^= val >> ;
val ^= val >> ;
val ^= val >> ;
val ^= val >> ;
val ^= val >> ; return !(x & );
}
//最右侧的1置为0
unsigned int clc_rightmost_one(unsigned int val)
{
return val & (val - );
}
//最右侧的连续1置0
unsigned int clc_rightmost_one_group(unsigned int val)
{
return (val | val - ) + & val;
}
//向零取整,除2的幂次
int divide_power2(int x, int k)
{
//注意下:对于移位运算,即使移位个数的类型为无符号类型,也不会将被移位数当成无符号类型进行移位,而是保持被移位数原来的类型属性
int bias = ( (x >> ((sizeof(int) << ) - )) & ((( << k) << ) - ) ) >> k;
return (x + bias) >> k;
}
//找到最左侧的1
unsigned int leftmost_one(unsigned int val)
{
val |= val >> ;
val |= val >> ;
val |= val >> ;
val |= val >> ;
val |= val >> ; return val - (val >> );
}
//找到最右侧的1
unsigned int rightmost_one(unsigned int x)
{
return x & (-x);
}
//找到最右侧的0
unsigned int rightmost_zero(unsigned int val)
{
return (~val) & (val + );
}
//据最右侧的1及后边的0生成掩码
unsigned int mask_rightmost_one_withzero(unsigned val)
{
return val ^ (val - );
}
//据右侧的连续的0生成掩码
unsigned int mask_rightmost_zero_group(unsigned int val)
{
return (~val) & (val - );
}
//向右传播最右侧的1
unsigned int propagate_rightmost_one(unsigned int val)
{
return val | (val - );
}
CSAPP chapter2 记录(bit_level_coding)的更多相关文章
- CSAPP buffer lab记录——IA32版本
CSAPP buffer lab为深入理解计算机系统(原书第二版)的配套的缓冲区溢出实验,该实验要求利用缓冲区溢出的原理解决5个难度递增的问题,分别为smoke(level 0).fizz(level ...
- CSAPP Bomb Lab记录
记录关于CSAPP 二进制炸弹实验过程 (CSAPP配套教学网站Bomb Lab自学版本,实验地址:http://csapp.cs.cmu.edu/2e/labs.html) (个人体验:对x86汇编 ...
- CSAPP:datalab实验记录
CSAPP:datalab实验记录 bitXor /* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1 * Lega ...
- 链接器(linker)的作用——CSAPP第7章读书笔记
首先说说我为什么要去读这一章.这个学期开OS的课,在Morden Operating System上读到和Process有关的内容时看到这样一句话:“Process is fundamentally ...
- CSAPP:cachelab(1)
本项目大体上就是要求用C\C++来模拟cpu对cache的访问,然后统计hits.misses和eviction的次数.其实并没有想象中的那么难,感觉完全可以当成一道acm里面的大模拟题..下面就对这 ...
- [CSAPP笔记][第九章虚拟存储器][吐血1500行]
9.虚拟存储器 为了更加有效地管理存储器且少出错,现代系统提供了对主存的抽象概念,叫做虚拟存储器(VM). 虚拟存储器是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完美交互. 为每个进程提供一个 ...
- CSAPP 六个重要的实验 lab5
CSAPP && lab5 实验指导书: http://download.csdn.net/detail/u011368821/7951657 实验材料: http://downlo ...
- CSAPP HITICS 大作业 hello's P2P by zsz
摘 要 摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息.摘要应包括本论文的目的.主要内容.方法.成果及其理论与实际意义.摘要中不宜使用公式.结构式.图表和非公知 ...
- 《Linux内核设计与实现》学习记录一
chapter1 Linux内核简介 前言:Unix是一个具有相似应用程序编程接口(API)并且基于相似设计理念的操作系统家族. 1.1 Unix的历史 1.Unix演化版实现了任务管理.换页机制.T ...
随机推荐
- 利用vagrant打包系统--制作自己的box
前置条件1.安装VirtualBox 2.安装Vagrant 3.在VirtualBox中安装操作系统,例如 CentOS 1)把在virtualBox中安装的系统打包成box 1.我们需要知道虚拟机 ...
- CentOS配置SSH远程连接
本文为大家介绍Centos中配置SSH远程连接的方法,只是简单配置,供初学者参考. 1.配置IP#setup 选择 NetWork configuration 选择 Device configurat ...
- 基于FPGA的5寸LCD显示屏的显示控制
基于FPGA的5寸LCD显示屏的显示控制 作者:lee神 1,图像处理基础知识 数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.图像处理最早出现于 20 世纪 50 年代,当时 ...
- PCIE知识点
引自:http://bbs.eetop.cn/thread-442072-1-1.html 1.从速度上来讲PCIE1.0标准 2.5G(8B/10B),pcie2.0标准 5.0G(8B/10B)p ...
- C++ HOJ 猴子分桃
[题目描写叙述] 老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的財富--一大堆桃子.老猴子决定把这些桃子分给小猴子. 第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个.它把剩下的一个留给 ...
- 微信wap开发---页面自适应大小
<meta name="viewport" content="width=device-width, initial-scale=0.5, minimum-scal ...
- Ubuntu和Busybox下用make menuconfig配置出错解决
http://blog.csdn.net/satiling/article/details/6965985 # make menuconfig In file included from script ...
- LeetCode: Surrounded Regions 解题报告
Surrounded Regions Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A ...
- 【火狐FireFox】同步失败后,书签被覆盖,如何恢复书签
问题场景: 使用公司的电脑,下载安装火狐,登录个人帐号后,火狐会自动开始同步书签.但有时候会同步失败,比如登录之前选的是[本地服务],而最新的书签都是在[全球服务]理,那么很有可能同步到的是N久之前的 ...
- 【WPF】用代码给集合(Collection)容器动态添加子元素(Item)
需求:如何向 TabControl 中添加选项卡项. 问题:做的TabControl分页栏想要通过代码来控制添加的子元素.同理可以将解决思路拓展到用于其他的集合控件添加子元素的问题. 在布局文件She ...