深入理解计算机系统(第三版)第二章家庭作业答案

阅读: 评论:0

深⼊理解计算机系统(第三版)第⼆章家庭作业答案博客⾥只有代码部分,位运算和浮点表⽰真妙!
ilvs
智能抄表2.55
#include <stdio.h>
#include <string.h>
typedef unsigned char* byte_pointer;
void show_byte(byte_pointer x,int len){
for(int i =0; i < len; i++)
printf("%.2x ", x[i]);
printf("\n");
}
void show_int(){
int num =8;
byte_pointer bp =(byte_pointer)#
show_byte(bp,sizeof(int));
}
void show_double(){
double num =3.1415926535;
byte_pointer bp =(byte_pointer)#
show_byte(bp,sizeof(double));
}
void show_short(){
short num =8;
张英森
byte_pointer bp =(byte_pointer)#
show_byte(bp,sizeof(short));
}
int main(){
show_int();
show_double();
show_short();
return0;
}
2.58
#include <iostream>
using namespace std;
typedef unsigned char* byte_point;
int is_little_endian(){
int32_t num =1;
byte_point bp =(byte_point)# printf("%s\n", bp);
cout <<*bp << endl;
printf("%d\n", num);
if(*bp)
return1;
else
return0;
}
int main(){
printf("%d\n",is_little_endian());
}
2.59
typedef unsigned char* byte_point;
void show_byte(int x,int len){
byte_point bp =(byte_point)&x;
for(int i =0; i < len; i++)
printf("%.2x ", bp[i]);
printf("\n");
}
byte_point change(int x,int y){
byte_point bx =byte_point(&x);
byte_point by =byte_point(&y);
byte_point bz =(byte_point)malloc(sizeof(int));
for(int i =0; i <sizeof(int); i++){
if(i ==0)
*bz =*bx;
else
*(bz + i)=*(by + i);
}
return bz;
}
int main(){
int x =0x89abcdef;
int y =0x76543210;
printf("%d %d\n", x, y);
byte_point z =change(x, y);
show_byte(x,sizeof(int));
show_byte(y,sizeof(int));
for(int i =0; i <sizeof(int); i++)
printf("%.2x ", z[i]);
/
/ show_byte(z, sizeof(int));
return0;
}
2.60
#include <stdio.h>
unsigned replace_byte(unsigned x,int i,unsigned char b){ int move = i <<3;
return(x &~(0xFF<< move)| b << move);
}
int main(){
int x =0x12345678;
printf("0x%.8X\n",replace_byte(x,2,0xAB));
printf("0x%.8X\n",replace_byte(x,0,0xAB));
return0;
}
2.61
int main(){
int move =(sizeof(int)-1)<<3;
//全为1输出1,否则输出0
int x =0x0;
int y =0xffffffff;
printf("%d %d\n",!(x ^~0x0),!(y ^~0x0));
printf("%d %d\n",!(~x),!(~y));
/
/全为0输出1
printf("%d %d\n",!(x ^0),!(y ^0));
printf("%d %d\n",!x,!y);
//最低有效字节全为1输出1
printf("%d %d\n",!(~(x &0xff)<< move),!(~(y &0xff)<< move)); //最⾼有效字节全为0输出1
printf("%d %d\n",!(x >> move),!(y >> move));
printf("%d\n", y >> move);
return0;
}
2.62
#include <stdio.h>
bool int_shifts_are_arithmetic(){
int x =0x80000000;
return(x >>30)&8;
}
int main(){
printf("%d",int_shifts_are_arithmetic());
return0;
}
2.63
signed srl(unsigned x,int k){
unsigned xsra =(int)x >> k;
int obj =~(((1<< k)-1)<<((sizeof(int)<<3)- k)); return xsra & obj;
}
signed sra(int x,int k){
int xsrl =(unsigned) x >> k;
int sum =sizeof(int)<<3;
int judge =1<<(sum -1- k);
judge &= xsrl;
int obj =~(judge -1);
return xsrl | obj;
}
int main(){
printf("%.8x\n",srl(0x81001100,4));
printf("%.8x\n",sra(0x81001100,4));
return0;
}
2.64
#include <stdio.h>
int any_odd_one(unsigned x){
unsigned obj =0x55555555;
return!!(x & obj);
}
int main(){
液压卸车翻板
unsigned x =0x00000001;
printf("%d\n",any_odd_one(x));
return0;
}
2.65
#include <iostream>
int odd_ones(unsigned x){
int w =sizeof(int)<<3;
x ^= x >>16;
x ^= x >>8;
x ^= x >>4;
x ^= x >>2;
x ^= x >>1;
return x &1;
}
int main(){
int a =0xffff0000;14n
int b =0x00000103;
printf("%d %d",odd_ones(a),odd_ones(b)); return0;
}
电梯五方通话系统
2.66

本文发布于:2023-07-13 18:10:06,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/175626.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:运算   代码   输出   答案   翻板
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图