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 ...
随机推荐
- vim:去掉响铃
vim在移动字符出界(上下左右)包括按<ESC>建都会响铃,有时候真的很烦. 在网上搜了一下,原来是visualbell来控制的,在vim里使用命令:help visualbell,原来禁 ...
- [svc][op]Ubuntu优化-服务管理(启动级别)
一 修改Ubuntu启动级别 sudo apt-get install sysv-rc-conf 执行: sysv-rc-conf 打x的表示开机启动. 二 启动级别 Ubuntu默认启动级别为2 r ...
- Ubuntu C/C++开发环境的安装和配置
安装ubantu会自动安装GCC,但是这个GCC什么文件都不能编译,因为没有一些必须的头文件,所以要安装build-essential这个软件包,安装了这个包会自动安装上g++,libc6-dev,l ...
- Spark性能优化指南——基础篇转
前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作 ...
- div,contenteditable编辑器之ctrl+enter换行,enter发送
//回车发消息 $scope.keyDownSend = function ($event) { var keycode = window.event?$event.keyCode:$event.wh ...
- 微信支付V3版本的那些事
最近在接入微信支付这块功能,博客园也有很多博友发表了支付的各种吐槽和解决之道,基于那些经验分享之上,我也来说说我的填坑之路. 1:准备工作,首先去申请注册一个公众号——服务号,然后将微信支付功能开通, ...
- sqlserver 针对预处理sql传入参数的处理方式
在编写sql中,经常需要对sql进行预处理,动态拼接字符串,那么要获取在这预处理之后返回的的某个值并且赋值,传入参数的语法 USE [OA] GO /****** Object: StoredProc ...
- C#播放器控件的常用方法介绍
右击工具箱->选择项(I)... -> 显示"选择工具箱项" -> COM组件 -> Windows Media Player wmp.dll 添加 [ ...
- 利用BioPerl将DNA序列翻译成蛋白序列
转自 https://www.plob.org/article/4603.html 具体请去上面的网页查看. my $DNA="ATGCCCGGT";my $pep=&Tr ...
- HttpClient-4.3.X 中get和post方法使用
转自:http://linhongyu.blog.51cto.com/6373370/1538672 一.简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效 ...