嵌套宏展开和浮点数内存值位运算
发布日期:2021-06-30 22:08:37
浏览次数:2
分类:技术文章
本文共 2591 字,大约阅读时间需要 8 分钟。
/// @file main.cpp/// @brief 嵌套宏展开和浮点数内存值位运算/// @note 做题感受, 以后一定要随身携带一个买菜用的计算器, 太坑了 :(#includeusing 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月05日 23时25分24秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
第七届acm省赛总结
2019-04-30
poj 1936 All in All
2019-04-30
hihocoder 1555 四次方根(矩阵快速幂)
2019-04-30
codeforces 449 D Jzzhu and Numbers(容斥+dp)
2019-04-30
Gym - 101334E Exploring Pyramids(dp+分治)
2019-04-30
hdu 6183 Color it(cdq分治+线段树)
2019-04-30
gym 101137 L Lazy Coordinator(概率)
2019-04-30
Mysql 入门
2019-04-30
Vue 之 axios 篇
2019-04-30
vue 之动画
2019-04-30
js的基础语法
2019-04-30
vue使用iconfont
2019-04-30
linux 查看文件夹权限
2019-04-30
linux tar 备份
2019-04-30
ubuntu中配置任意应用的快捷键
2019-04-30
ln 命令 硬链接
2019-04-30
chkconfig使用和级别介绍
2019-04-30
ubuntu 快捷键
2019-04-30
linux 根目录下文件夹分析
2019-04-30