#include <iostream>
#include <sys/time.h> // gettimeofday()
#include <climits> // UINT_MAX
using namespace std;
#define NUMSTEPS UINT_MAX
int main(){
timeval t1, t2, t3, t4;
unsigned int a = 32, b = 64, c = 0, i = 0;
double elapsedTime;
gettimeofday(&t1, NULL);
for(i = 0; i < NUMSTEPS; ++i){
swap(a, b);
}
gettimeofday(&t2, NULL);
for(i = 0; i < NUMSTEPS; ++i){
a^=b;
b^=a;
a^=b;
}
gettimeofday(&t3, NULL);
for(i = 0; i < NUMSTEPS; ++i){
c = b;
b = a;
a = c;
}
gettimeofday(&t4, NULL);
cout<<"NUMSTEPS = "<<NUMSTEPS<<endl;
// compute and print the elapsed time in millisec
elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0; // sec to ms
elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000.0; // us to ms
cout << "swap\t" << elapsedTime << " ms.\n";
elapsedTime = (t3.tv_sec - t2.tv_sec) * 1000.0; // sec to ms
elapsedTime += (t3.tv_usec - t2.tv_usec) / 1000.0; // us to ms
cout << "XOR\t" << elapsedTime << " ms.\n";
elapsedTime = (t4.tv_sec - t3.tv_sec) * 1000.0; // sec to ms
elapsedTime += (t4.tv_usec - t3.tv_usec) / 1000.0; // us to ms
cout << "+var\t" << elapsedTime << " ms.\n";
cout<<a<<b<<c<<"\b\b\b\b\b\b";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3lzL3RpbWUuaD4JLy8gZ2V0dGltZW9mZGF5KCkKI2luY2x1ZGUgPGNsaW1pdHM+CQkvLyBVSU5UX01BWAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgTlVNU1RFUFMgVUlOVF9NQVgKCmludCBtYWluKCl7Cgl0aW1ldmFsIHQxLCB0MiwgdDMsIHQ0OwoJdW5zaWduZWQgaW50IGEgPSAzMiwgYiA9IDY0LCBjID0gMCwgaSA9IDA7Cglkb3VibGUgZWxhcHNlZFRpbWU7CgoJZ2V0dGltZW9mZGF5KCZ0MSwgTlVMTCk7Cglmb3IoaSA9IDA7IGkgPCBOVU1TVEVQUzsgKytpKXsKCQlzd2FwKGEsIGIpOwoJfQoKCWdldHRpbWVvZmRheSgmdDIsIE5VTEwpOwoJZm9yKGkgPSAwOyBpIDwgTlVNU1RFUFM7ICsraSl7CgkJYV49YjsKCQliXj1hOwoJCWFePWI7Cgl9CgoJZ2V0dGltZW9mZGF5KCZ0MywgTlVMTCk7Cglmb3IoaSA9IDA7IGkgPCBOVU1TVEVQUzsgKytpKXsKCQljID0gYjsKCQliID0gYTsKCQlhID0gYzsKCX0KCWdldHRpbWVvZmRheSgmdDQsIE5VTEwpOwoKCWNvdXQ8PCJOVU1TVEVQUyA9ICI8PE5VTVNURVBTPDxlbmRsOwoJLy8gY29tcHV0ZSBhbmQgcHJpbnQgdGhlIGVsYXBzZWQgdGltZSBpbiBtaWxsaXNlYwoJZWxhcHNlZFRpbWUgPSAodDIudHZfc2VjIC0gdDEudHZfc2VjKSAqIDEwMDAuMDsgICAgICAvLyBzZWMgdG8gbXMKCWVsYXBzZWRUaW1lICs9ICh0Mi50dl91c2VjIC0gdDEudHZfdXNlYykgLyAxMDAwLjA7ICAgLy8gdXMgdG8gbXMKCWNvdXQgPDwgInN3YXBcdCIgPDwgZWxhcHNlZFRpbWUgPDwgIiBtcy5cbiI7CgoJZWxhcHNlZFRpbWUgPSAodDMudHZfc2VjIC0gdDIudHZfc2VjKSAqIDEwMDAuMDsgICAgICAvLyBzZWMgdG8gbXMKCWVsYXBzZWRUaW1lICs9ICh0My50dl91c2VjIC0gdDIudHZfdXNlYykgLyAxMDAwLjA7ICAgLy8gdXMgdG8gbXMKCWNvdXQgPDwgIlhPUlx0IiA8PCBlbGFwc2VkVGltZSA8PCAiIG1zLlxuIjsKCgllbGFwc2VkVGltZSA9ICh0NC50dl9zZWMgLSB0My50dl9zZWMpICogMTAwMC4wOyAgICAgIC8vIHNlYyB0byBtcwoJZWxhcHNlZFRpbWUgKz0gKHQ0LnR2X3VzZWMgLSB0My50dl91c2VjKSAvIDEwMDAuMDsgICAvLyB1cyB0byBtcwoJY291dCA8PCAiK3Zhclx0IiA8PCBlbGFwc2VkVGltZSA8PCAiIG1zLlxuIjsKCWNvdXQ8PGE8PGI8PGM8PCJcYlxiXGJcYlxiXGIiOwoJcmV0dXJuIDA7Cn0K