少分配内存,少计算数据,哪种更好
第一种
#include <stdio.h>int wordlength();int rightrot(unsigned x, int n);int main(){ unsigned x; int n, a; x = 32769; n = 7; a = rightrot(x, n); printf("a = %d\n", a); return 0;}int wordlength(){ unsigned v; int i; v = (unsigned)~0; for (i = 1; (v=v>>1) > 0; ++i) { ; } return i;}int rightrot(unsigned x, int n){ unsigned rbits; if ((n = n%wordlength()) > 0) { rbits = x & ~(~0<<n); rbits = rbits << (wordlength()-n); x = x >> n; x = x | rbits; } return x;}
#include <stdio.h>int wordlength();int rightrot(unsigned x, int n);int main(){ unsigned x; int n, a; x = 32769; n = 7; a = rightrot(x, n); printf("a = %d\n", a); return 0;}int wordlength(){ unsigned v; int i; v = (unsigned)~0; for (i = 1; (v=v>>1) > 0; ++i) { ; } return i;}int rightrot(unsigned x, int n){ unsigned rbits; int wl; wl = wordlength(); if ((n = n%wl) > 0) { rbits = x & ~(~0<<n); rbits = rbits << (wl-n); x = x >> n; x = x | rbits; } return x;}