博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《CSAPP》(第3版)答案(第二章)(三)
阅读量:4170 次
发布时间:2019-05-26

本文共 5697 字,大约阅读时间需要 18 分钟。

P85

V = 2 E ∗ M V=2^{E}* M V=2EM

b i a s = 2 k − 1 − 1 bias = 2^{k-1}-1 bias=2k11

  • A
    7=111.000…;
    M=1.11;
    f=0.11;
    E=2;
    V=7.0;
  • B
    M=1.11…;
    f=0.11…(n个1);
    E=n;
    V= 2 n + 1 − 1 2^{n+1}-1 2n+11;
  • C
    M=1.00…;
    f=0.00…
    E=bias-1;
    V= 2 b i a s − 1 2^{bias-1} 2bias1

P86

description binary decimal
least positive unstandard 0 0000…(15) 0 000…(62)1 2 1 − ( 2 15 − 1 − 1 ) − 63 2^{1-(2^{15-1}-1)-63} 21(21511)63
least positive standard 0 000…(14)1 1 000…(63) 2 1 − ( 2 15 − 1 − 1 ) 2^{1-(2^{15-1}-1)} 21(21511)
bigest standard 0 111…(14)0 1 111…(63) 2 2 15 − 1 − 1 ∗ ( 2 − 2 − 63 ) 2^{2^{15-1}-1 }* (2-2^{-63}) 221511(2263)

P87

Desc Hex M M M E E E V V V D D D
-0 0x8000 0 -14 -0 -0.0
>2 least 0x4001 1025 1024 \frac{1025}{1024} 10241025 1 1025 512 \frac{1025}{512} 5121025 2.00195312
512 0x6000 1 9 512 512.0
bigest denormalized 0x03FF 1023 1024 \frac{1023}{1024} 10241023 -14 1023 2 24 \frac{1023}{2^{24}} 2241023 6.09755516e-5
- ∞ \infin 0xFC00 - - - ∞ \infin - ∞ \infin
ox3BB0 0x3BB0 123 64 \frac{123}{64} 64123 -1 123 128 \frac{123}{128} 128123 0.9609375

P88

A b i t A bit Abit A v a l u e A value Avalue B b i t B bit Bbit B v a l u e B value Bvalue
1 01110 001 - 9 16 \frac{9}{16} 169 1 0110 0010 - 9 16 \frac{9}{16} 169
0 10110 101 13 ∗ 2 4 13*2^4 1324 0 1110 1010 13 ∗ 2 4 13*2^4 1324
1 00111 110 - 7 2 10 \frac{7}{2^{10}} 2107 1 0000 0111 - 7 2 10 \frac{7}{2^{10}} 2107
0 00000 101 5 2 11 \frac{5}{2^{11}} 2115 0 0000 0001 1 2 10 \frac{1}{2^{10}} 2101
1 11011 000 - 2 12 2^{12} 212 1 1110 1111 - 31 ∗ 2 3 31*2^3 3123
0 11000 100 3 ∗ 2 8 3*2^8 328 0 1111 0000 + ∞ \infin

P89

  • A
  • B
    否,y=INT_MIN;
  • C
  • D
    否,-1,-1,INT_MIN
  • E
    否。z==0;

P90

#include 
#include
float u2f(unsigned x) {
return *(float*) &x;}float fpwr2(int x) {
unsigned exp, frac; unsigned u; if (x < 2-pow(2,7)-23) {
exp = 0; frac = 0; } else if (x < 2-pow(2,7)) {
exp = 0; frac = 1 << (unsigned)(x - (2-pow(2,7)-23)); } else if (x < pow(2,7)-1+1) {
exp = pow(2,7)-1+x; frac = 0; } else {
exp = 0xFF; frac = 0; } u = exp << 23 | frac; return u2f(u);}

P91

  • A
    11.0010010000111111011011
  • B
    11.001001(001循环)…
  • C
    第9位

P92

#include 
typedef unsigned float_bits;float_bits float_negate(float_bits f){
unsigned sig = f>>31; unsigned e = (f>>23)&0xff; unsigned frac = f&0x7fffff; unsigned res = (e<<23)|frac; if(e==0xff&&frac) res = f; return res;}int main(){
printf("%x\n",float_negate(114514));}

P93

#include 
typedef unsigned float_bits;float_bits float_absval(float_bits f){
unsigned sig = f>>31; unsigned e = (f>>23)&0xff; unsigned frac = f & 0x7FFFFF; if ((e == 0xFF) && (frac != 0)) {
return f; } return 0 << 31 | e << 23 | frac;}int main(){
printf("%u\n",float_absval(-1919810));}

P94

#include 
typedef unsigned float_bits;float_bits float_twice(float_bits f) {
unsigned sig = f >> 31; unsigned e = f >> 23 & 0xFF; unsigned frac = f & 0x7FFFFF; if (e == 0xFF) {
return f; } if (e == 0) {
frac <<= 1; } else if (e == (0xFF - 1)) {
e = 0xFF; frac = 0; } else {
e += 1; } return sig << 31 | e << 23 | frac;}int main(){
printf("%f\n",float_twice(0x11451419));}

P95

#include 
typedef unsigned float_bits;float_bits float_half(float_bits f){
unsigned sig = f>>31; unsigned e = (f>>23)&0xff; unsigned frac = f&0x7fffff; unsigned tail = f&0x7ffffffff; if(e==0xff) return f; int ass = (frac&0x3)==0x3; if(e==0){
frac=frac>>1; frac=frac+ass; } else if(e==1){
tail=tail>>1; tail=tail+ass; e=(tail>>23)&0xff; frac=tail&0x7fffff; } else {
e=e-1; } return sig<<31|e<<23|frac;}int main(){
printf("%f\n",float_half(114514.1919810));}

P96

#include 
typedef unsigned float_bits;int float_f2i(float_bits f){
unsigned sig = f>>31; unsigned e = (f>>23)&0xff; unsigned frac = f&0x7fffff; unsigned bias = 0x7f; int val;//num unsigned E; unsigned M; if(e>=0&&e
=31+bias) val = 0x80000000; else{
E = e-bias; M = frac|0x800000; if(E>23){
val = M<<(E-23); }else{
val = M>>(23-E); } } if(sig) return -val; else return val;}int main(){
printf("%f\n",float_f2i(0xffaaffaa));}

P97

#include 
#include
typedef unsigned float_bits;int bits_length(int i){
if((i&INT_MIN)!=0) return 32; unsigned u = (unsigned)i; int length = 0; while(u>=(1<
>(32-1);}float_bits float_i2f(int i){
unsigned sig,exp,rest,frac,exp_sig,round_part; unsigned bits,fbits; unsigned bias = 0x7f; if(i==0){
sig=0; exp=0; frac=0; return sig<<31|exp<<23|frac; } if(i==INT_MIN){
sig=1; exp=bias+31; frac=0; return sig<<31|exp<<23|frac; } sig=0; if(i<0){
sig=1; i=-i; } bits=bits_length(i); fbits=bits-1; exp=bias+fbits; rest=i&bits_mask(fbits); if(fbits<=23){
frac=rest<<(23-fbits); exp_sig=exp<<23|frac; } else{
int offset=fbits-23; int round_mid=1<<(offset-1); round_part=rest&bits_mask(offset); frac=rest>>offset; exp_sig=exp<<23|frac; if(round_part
round_mid){
exp_sig=exp_sig+1; }else{
if((frac&0x1)==1){
exp_sig=exp_sig+1; } } } return sig<<31|exp_sig;}int main(){
printf("%f\n",float_i2f(114.514));}

第二章 完

转载地址:http://jywai.baihongyu.com/

你可能感兴趣的文章
Java程序员普遍存在的面试问题以及应对之道(新书第一章节摘录)
查看>>
程序员高效出书避坑和实践指南
查看>>
计算机方面毕业生怎样写简历
查看>>
从软件公司的异同点讲起,聊聊未来的程序员该如何选公司和谋规划
查看>>
我不想安于当前的限度,以达到所谓的幸福,回顾下2020年的我
查看>>
如何在面试中介绍自己的项目经验(面向java改进版)
查看>>
通过写n本书的积累,我似乎找到了写好技术文章的方法(回复送我写的python股票电子书)
查看>>
如果很好说出finalize用法,面试官会认为你很资深
查看>>
Java面试官经验谈:如何甄别候选人真实的能力,候选人如何展示值钱技能
查看>>
分析若干没面试机会和没体现实力的简历
查看>>
用python的matplotlib和numpy库绘制股票K线均线
查看>>
以互联网公司的经验告诉大家,架构师究竟比高级开发厉害在哪?
查看>>
GanttProject 使用的控件第三方包:jdnc-modifBen.jar
查看>>
ps、grep和kill联合使用杀掉进程
查看>>
openfire中的mina框架使用
查看>>
去掉Windows Messager的自动登录
查看>>
dspace可以检索中文了
查看>>
利用Eclipse编辑中文资源,配置文件
查看>>
将中文转为unicode 及转回中文函数
查看>>
《程序员》专访金蝶:是谁不相信国产软件?
查看>>