博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++运算各版本学习
阅读量:4365 次
发布时间:2019-06-07

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

DEBUG:

除数是2 的倍数

除数不是2 的倍数

release版本  

1)除数为 2 的倍数+ 禁止调试

int a = -160;	a = a / 16;	printf("%d",a);

商是-10  余数也是-10的

2)除数不为2的倍数  + 正数+最快速度

#include "stdafx.h"	int a = 10;int main(int argc){	printf("%d",a/3);	return 0;}

流程:

10/3   =   10*  (2^n /(3*2^n)) =    10  *    (2^n/3) *  (1/2^n)

(2^n/3) = 幻数

然后将eax向右移动1F(31),那么此时eax只剩下一个原来的符号位的值了
然后将这个原符号位的值加上edx,就是说:
如果edx的值为正数的话,那么符号位为0add edx,0之后 edx的值不变
如果edx的值为负数的话,那么符号位为1add edx,-1之后 edx的值 +1

学习参考:

最后结果怎么除数    =     2^找出移动多少位N / 幻数

3)除数不为2的倍数  +负数+最快速度

#include "stdafx.h"	int a = -10;int main(int argc){	printf("%d",a/3);	return 0;}

那么   100000000 /0x55555556 = 2

+1 就是 3  所以除数为3

4)除数不为2的倍数  +无符号被除数数+最快速度             难度+1

4)除数不为2的倍数  +有符号被除数数+最快速度             难度+1

浮点指令DEBUG:

1)

2)

取模运算 % RELEASE

最快速度  除数为 2 的幂

#include "stdafx.h"int main(int argc, char* argv[]){	printf("%d",argc%2);		return 0;}
0x80000001  为
10000000000000000000000000000001

后面是1位  那么  1  代入  2^k      为2    那么就是  %2

最快速度  除数为 -2 的幂

and eax,0x1

看到这里   就是  %2

条件表达式:

1)

2)

3)printf("%d",argc <= 8?5:10);   release 最快速度

4)  printf("%d",argc >= 8?5:10);   release 最快速度

__FASTCALL 调用方式

release 版本下 = 

在  编译器  O2 选项下  _cdecl调用方式并不一定会马上平衡栈顶,极有可能会复写传播并与其他函数一起平衡堆栈

转载于:https://www.cnblogs.com/zcc1414/p/3982410.html

你可能感兴趣的文章
EASYUI DATAGRID 多列复选框CheckBox
查看>>
fit_transform和transform的区别
查看>>
常用激活函数(激励函数)理解与总结
查看>>
DataFrame.to_dict(orient='dict')英文文档翻译
查看>>
DictVectorizer中的fit_transform
查看>>
HDFS优缺点
查看>>
排序算法(1) 快速排序 C++实现
查看>>
伙伴分配器的一个极简实现
查看>>
$.ajax所犯的错误。success后面不执行
查看>>
Spring注入方式及注解配置
查看>>
cocos2dx blender 骨骼动画实现
查看>>
ARM基础
查看>>
eclipse
查看>>
Mybatis参数传递及返回类型
查看>>
关于Ubuntu使用笔记
查看>>
调整Tomcat上的参数提高性能[转]
查看>>
在Ajax方式产生的浮动框中,点击选项包含某个关键字的选项
查看>>
SDK 操作 list-view control 实例 -- 遍历进程
查看>>
由于SSH配置文件的不匹配,导致的Permission denied (publickey)及其解决方法
查看>>
65. Valid Number
查看>>