我的的一些家庭作业
程序员文章站
2022-07-10 15:03:16
...
去年因为自身心理原因回家修养.家里比深圳冷许多,所以一直都在运动锻炼身体,荒废了自己的学习.
现在天气暖和了,要天天向上了.下面是自己写的一些小例子,也可以说是作<CSAPP>的一些作业所随便写的一些东西.
1.自定义的define.h的头文件的部分内容
#include <stdio.h> #include <limits.h> #include <stdint.h> #include <stdlib.h> #define BITS_LENGTH_OF_BYTE 8u // 检测乘法是否溢出-1 int tmul_ok(int x, int y) { int result = x * y; return !x || result / x == y; } // 检测乘法是否溢出-2 int tmul_ok_1(int x, int y) { int64_t result = x * y; return !x || !y || !(result & INT_MAX); } int div16(int x) { int bias = (x >> 31) & 0xf; return (x + bias) >> 4; } // 判断小端字节序 int little_endian_ok() { unsigned i = 1; unsigned char *pi = (unsigned char *)&i; return *pi & 1; } /* 输出指定基本数据类型的-位模式; 针对小端字节序的系统,从符合人类书写习惯的高位开始输出 */ void show_bits(const char *start_addr, unsigned byte_length) { unsigned char mask_no = 1U; for (unsigned i = byte_length; i > 0; i--) { unsigned blob_var = BITS_LENGTH_OF_BYTE; // blob => bits length of byte unsigned char c = *(start_addr + i - 1); for (; blob_var > 0; blob_var--) { printf("%u ", (c >> (blob_var - 1)) & mask_no); } } printf("\n"); }
2.判断自己系统是否是小端字节序
显示是1就说明是小端字节序的系统
#include <stdio.h> #include "define.h" int main() { printf("小端字节序:%d\n", little_endian_ok()); return 0; }
3.根据输入的数字输出-位模式
简单实现的小东西,所以目前只支持32位和64位的整形数字,感兴趣的同学请自行拓展,拓展好了请发个留言共同进步.
#include <stdio.h> #include "define.h" int main(int arg_l, char *args[]) { if (arg_l < 2) { printf("参数输入错误"); return 0; } // int byte_length = *((int *)args[2]); int byte_length = atoi(args[2]); const char *start_addr; if (byte_length == 4) { int i = atoi(args[1]); start_addr = (char *)&i; } else { long l = atol(args[1]); start_addr = (char *)&l; } show_bits(start_addr, byte_length); return 0; }
上一篇: JS 跨域请求