嵌套宏展开和浮点数内存值位运算
发布日期:2021-06-30 22:08:37 浏览次数:2 分类:技术文章

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

/// @file main.cpp/// @brief 嵌套宏展开和浮点数内存值位运算/// @note 做题感受, 以后一定要随身携带一个买菜用的计算器, 太坑了 :(#include 
using namespace std;#define M(x) x*x+2*x#define PRINTF(num,k) num++; cout << k << endl;int main() { int i = 0; int k = M(M(4)); /** /// 宏嵌套的展开 /// 宏展开时, 编译器先按照宏入参变量展开, 然后再套入的宏入参值! /// 不能用宏入参值先套进宏进行展开, 算出的结果和编译器算出的不一样! M(x) x*x+2*x M(4) 4*4+4*4 M(y) = y*y+2*y M(M(y)) = x*x+2*x = y*y+2*y*y*y+2*y+2*y*y+2*y = y*y+2*y*y*y+2*y+2*y*y+2*y = pow(y,2)+2*pow(y,3)+2*y+2*pow(y,2)+2*y = 2*pow(y,3)+3*pow(y,2)+4*y M(M(4)) = 2*pow(4,3)+3*pow(4,2)+4*4 = 2*64 + 3*16 + 16 = 128 + 48 + 16 = 176 + 16 = 192 k = M(M(4)) = 192 ///< ok */ while (i < 3) PRINTF(i,k); /** 宏展开 while (i < 3) i++; /// 此时 i = 3, k不变 = 192 cout << k << endl; ///< 192 */ float f = -(float)(k+2)/3104; /** 手算简单整数除法 f = -(float)(192 + 2)/3104 = -(float)194/3104 = -0.0625 */ /** 16进制对照表 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F -0.0625f 转4字节内存表示 BD800000 BD800000 >> 18 = 1011,1101,1000,00 00,0000,0000,0000,0000 >> 18 = 10111101100000000000000000000000 >> 18 = 1011,1101,1000,00 = 1111,1111,1111,1111,1110,1111,0110,0000 符号位1补充左面移位 (BD800000 >> 18) & 0xff = 0110,0000 = 60 */ cout << hex << (((int&)f >> 18) & 0xFF) << endl; ///< 60 /// run result /// 60 return 0;}/**-0.0625f 转4字节内存表示 BD800000S = 1(负数)整数部分 = 0B小数部分 = .0625f = .0001B 0.0625f = 0.0001B * pow(2,0) = 1.0B * pow(2,-4)E = 127 + (-4)(pow2,-4 's -4) = 123 = 01111011BD = 0B(1.0B 's 0B) = 0B 补零(凑足23位) = 000 0000 0000 0000 0000 0000 00000000000000000000000B SED = 1, 01111011, 00000000000000000000000 = 10111101100000000000000000000000 = 1011,1101,1000,0000,0000,0000,0000,0000 = B D 8 0 0 0 0 0 = BD800000 16进制对照表 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F 123转2进制表示 => 01111011 123/2 61 1 61/2 30 1 30/2 15 0 15/2 7 1 7/2 3 1 3/2 1 1小数部分转2进制表示.0001B .0625f *2 .1250 0 *2 .2500 0 *2 .50 0 *2 1.00 *//** 在计算机记事本上,不用计算器,手工计算简单整数除法194/3104 194 0. / 3104 ---------- 1940 0.0 / 3104 ---------- 19400 0.06 / 3104*6 18624 ---------- 776 0.06 / 3104 ---------- 7760 0.062 / 3104*2 6208 ---------- 1552 0.062 / 3104 ---------- 15520 0.0625 ///< 商 / 3104*5 15520 ---------- 0*/

转载地址:https://lostspeed.blog.csdn.net/article/details/50572016 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:构造,析构,覆盖,重载,隐藏
下一篇:Debug模式下的数组越界访问结果分析

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月05日 23时25分24秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章