网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月04日漏签0天
c语言吧 关注:798,835贴子:4,357,208
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 下一页 尾页
  • 39回复贴,共2页
  • ,跳到 页  
<<返回c语言吧
>0< 加载中...

异或和赋值那个速度快?

  • 只看楼主
  • 收藏

  • 回复
  • 研D长伤
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果是一个整形数,类似int a;
让a的值为0,是a=0快还是a^=a快?


  • 八甲基环丁烷
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好想法,我觉得是直接赋快一点。
可以用time.h测测,循环个十几万次应该可以看出来


2025-07-04 10:51:40
广告
  • 我爱吃老虎
  • 大能力者
    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
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
欢迎进来一起学习交流讨论问题


2025-07-04 10:45:40
广告
  • 金色潜鸟
  • 麻婆豆腐
    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
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


。。。


2025-07-04 10:39:40
广告
  • Dawn
  • 彩虹面包
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一,瓶颈在存储读取上,副作用操作瓶颈在这里。
二,如楼上所言,全给你优化成赋0。当然如果端口占用可能会调用位运算模块,很难触发。
三,高级语言不要考虑这种问题。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 39回复贴,共2页
  • ,跳到 页  
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示