网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月17日
漏签
0
天
c语言吧
关注:
798,403
贴子:
4,342,489
看贴
图片
吧主推荐
视频
游戏
1
2
下一页
尾页
39
回复贴,共
2
页
,跳到
页
确定
<<返回c语言吧
>0< 加载中...
异或和赋值那个速度快?
只看楼主
收藏
回复
研D长伤
便当
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
如果是一个整形数,类似int a;
让a的值为0,是a=0快还是a^=a快?
八甲基环丁烷
大能力者
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
好想法,我觉得是直接赋快一点。
可以用time.h测测,循环个十几万次应该可以看出来
我爱吃老虎
大能力者
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
感觉异或快
XeO2
马猴烧酒
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这些不是C程序员该考虑的问题,因为编译器会帮你解决这些问题
如果看过反汇编的代码的话,不难留意到一条指令:XOR EAX,EAX。按理说这条指令似乎也可以MOV EAX,0,但实际上前者在x86上要更常见
然而这些都是汇编的事情。C语言作为一门(并不)高级语言,写代码要考虑可读性,a^=a这种写法不如a=0来得直接,尝试去解决编译器能解决的问题更是舍本逐末
m372987657
毛蛋
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
什么乱七八糟的。。。a如果定义的是局部变量,你不赋值它里面就是垃圾值,你赋值了才有值。回过头来解释,a^=a的意义又在哪?如果把a定义成全局变量,那么它本身值就是0,你给a^=a又有什么意义?
Kingk
团子家族
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
异或快
FMaj6
毛蛋
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
编译器快
热心网友来了
帕秋莉糕
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
欢迎进来一起学习交流讨论问题
金色潜鸟
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
异或和赋值,当然是异或快。运算比较一下就知道了。
金色潜鸟
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#define NOMINMAX
#include <windows.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
void accurate_dt_ms1()
{
LARGE_INTEGER nFreq;
LARGE_INTEGER nBeginTime;
LARGE_INTEGER nEndTime;
int executionTime;
int i,a=2;
double dt,d_freq,d_begin_t,d_end_t;
// Start of time interval
QueryPerformanceFrequency(&nFreq);
d_freq = (double) nFreq.QuadPart;
QueryPerformanceCounter(&nBeginTime);
// Any code
for (i=0;i<90000;i++) a=0;
// End of time interval
QueryPerformanceCounter(&nEndTime);
// time interval in ms
executionTime = (nEndTime.QuadPart - nBeginTime.QuadPart) * 1000 / nFreq.QuadPart;
dt = (double) ((nEndTime.QuadPart - nBeginTime.QuadPart) * 1000) / d_freq;
printf("==============\naccurate_dt_ms:\n");
printf("1 a=%d, dt=%d in ms or dt=%lf ms\n",a, executionTime,dt);
}
void accurate_dt_ms2()
{
LARGE_INTEGER nFreq;
LARGE_INTEGER nBeginTime;
LARGE_INTEGER nEndTime;
int executionTime;
int i,a=2;
double dt,d_freq,d_begin_t,d_end_t;
// Start of time interval
QueryPerformanceFrequency(&nFreq);
d_freq = (double) nFreq.QuadPart;
QueryPerformanceCounter(&nBeginTime);
// Any code
for (i=0;i<90000;i++) a ^=a;
// End of time interval
QueryPerformanceCounter(&nEndTime);
// time interval in ms
executionTime = (nEndTime.QuadPart - nBeginTime.QuadPart) * 1000 / nFreq.QuadPart;
dt = (double) ((nEndTime.QuadPart - nBeginTime.QuadPart) * 1000) / d_freq;
printf("==============\naccurate_dt_ms:\n");
printf("2 a=%d, dt=%d in ms or dt=%lf ms\n", a, executionTime,dt);
}
int main()
{
accurate_dt_ms1();
accurate_dt_ms2();
return 0;
}
金色潜鸟
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
编译器,MS VC++ 6.0
多运算几次,比较一下耗时便知。
厉害的八达鸟
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
那么请问异或自己和或非全1哪个快
空气饼干
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
编译器全给优化了
一周休七日
帕秋莉糕
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
。。。
Dawn
彩虹面包
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
一,瓶颈在存储读取上,副作用操作瓶颈在这里。
二,如楼上所言,全给你优化成赋0。当然如果端口占用可能会调用位运算模块,很难触发。
三,高级语言不要考虑这种问题。
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示