嵌套宏展开和浮点数内存值位运算
来源:互联网 发布:淘宝三国杀武将牌 编辑:程序博客网 时间:2024/06/08 03:09
/// @file main.cpp/// @brief 嵌套宏展开和浮点数内存值位运算/// @note 做题感受, 以后一定要随身携带一个买菜用的计算器, 太坑了 :(#include <iostream>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*/
0 0
- 嵌套宏展开和浮点数内存值位运算
- 计算表达式的值(仅含有四则运算和支持括号嵌套,浮点数运算)
- 位运算和浮点数的简单思考
- 浮点数的表示和基本运算
- 浮点数的表示和基本运算
- 关于浮点数不能进行位运算的问题
- js浮点数运算保留两位小数点
- 对整数和浮点数存储,little-endian和big-endian字节顺序,以及位运算的一点回顾
- 16位浮点数
- JavaScript 浮点数运算
- Shell浮点数运算
- JavaScript浮点数运算
- 浮点数的运算
- java 浮点数运算
- Shell浮点数运算
- 浮点数运算注意事项
- 高精度浮点数运算
- php 浮点数运算
- 5.数值型字面量
- Nginx+Tomcat 配置负载均衡
- Linux常用命令_软件包管理
- Webpack入门——使用Webpack打包Angular项目的一个例子
- 6.数值型类型转换
- 嵌套宏展开和浮点数内存值位运算
- 7.类型别名
- Lua 关于函数的更多内容
- 3.Oracle BBED解析数据块——BBED基本使用一
- 4.Oracle BBED解析数据块——BBED基本使用二
- 8.布尔类型
- 5.Oracle BBED解析数据块——BBED基本使用三
- 6.Oracle BBED解析数据块——BBED基本使用四
- x的平方根——(不知为何这道有点难)