CSAPP 第二章 homework(未完成)
2016-05-13 12:01
756 查看
2.57:
2.58:
2.59:
2.60:
2.61:
2.62:
2.63:
2.64:
2.65:
2.66:
2.67:
2.68:
2.69:
2.70:
void show_short(short s); void show_long(long long l); void show_double(double d); void show_bytes(char *p, int size); void show_short(short s) { printf("the value of short %d is:", s); show_bytes((char *)&s, sizeof(short)); } void show_long(long long l) { printf("the value of short %lld is:", l); show_bytes((char *)&l, sizeof(long long)); } void show_double(double d) { printf("the value of short %lf is:", d); show_bytes((char *)&d, sizeof(double)); }
2.58:
/* * 1 in little_endian * *((char *)&i) means : * 01 00 00 00 ----> 01 */ int is_little_endian() { int i = 1; return *((char *)&i); }
2.59:
int graft(int x, int y) { return (x & 0xff) | (y & ~0xff); //或也可以改成+ }
2.60:
unsigned int graft2(unsigned int x,unsigned char y, int offset) { return (x & ~(0xff << (offset << 3))) | (((unsigned int)y) << (offset << 3)); }
2.61:
//A return !~x; //B return !x; //C return !~((x >> ((sizeof(int) - 1) << 3)); //D return !(x & 0xff);
2.62:
return ~((~0)>>1); //~0 = -1
2.63:
int sra(int x, int k) { //arithmetically int xsrl = (unsigned) x >> k; unsigned first_bit = x & (0x1 << (sizeof(int) * 8 - 1)); return xsrl + (((!first_bit) + ~0) << (sizeof(int) * 8 - k)); } unsigned srl(unsigned x, int k) { //logically unsigned xsra = (int) x >> k; unsigned first_bit = x & (0x1 << (sizeof(int) * 8 - 1)); return xsra & ~(~0 << (sizeof(int) * 8 - k)); }
2.64:
int any_even_one(unsigned x) { return !!(x & 0xaaaaaaaa); }
2.65:
int even_ones(unsigned x) { x ^= (x >> 16); x ^= (x >> 8); x ^= (x >> 4); x ^= (x >> 2); x ^= (x >> 1); return !(x & 0x1); }
2.66:
int leftmost_one(unsigned x) { x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; return (x>>1) + 1; }
2.67:
int int_size_is_32(){ int set_msb = 1 << 31; int beyond_msb = (1 << 16) << 16; return set_msb && !beyond_msb; } int better_int_size_is_32() { int seb_msb = ((1 << 8) << 8) << 15; int beyond_msb = (((1 << 8) << 8) << 8) << 8; return seb_msb && !beyond_msb; }
2.68:
//原题有点歧义,参数x没起到作用,于是把题目改成把x最低n位变成1 int lower_byte(int x, int n) { return x | ((unsigned)(~0) >> (sizeof(int) * 8 - n)); }
2.69:
unsigned rotate_right(unsigned x, int n) { return (x >> n) + ((x << (sizeof(int) * 8 - n - 1)) << 1); }
2.70:
int fits_bits(int x, int n) { x >>= (n - 1); return !x || !(x + 1); }
相关文章推荐
- AppDelegate的方法意义
- android集成友盟数据收集环境及简单实用
- 主界面获取第三方app,或获取系统自带app ,以及过滤某app 和大家一起分享下,(*^__^*) 嘻嘻……
- Android开发之 EditText 上的清空按钮
- Google发布Gboard,一个iOS输入法,让你不用浏览器也能搜索
- Android studio的项目名称变成绿色的解决方法
- Android时间选择器
- Android 安全综述
- IOS UIwebView加载本地文件(支持显示图片)
- Android 错误提示:Conversion to Dalvik format failed with error 1 解决办法
- android获取gallery中的图片以及调用系统相机
- 终结Android项目的R文件报错问题
- ShareSDK各社交平台申请APPkey 的网址及申请流程汇总
- ios之音频系列
- Android 同时加载多个webview 加载很慢解决方式
- Unity3D asset bundle 格式简析
- Android趣味小实例—涂鸦画板
- iOS tableView动态创建分组及组内排序
- android 控制软键盘 在开始时候 不出现
- Cardboard虚拟与现实Android Demo