आप दो 4 बाइट यादृच्छिक पूर्णांकों गठबंधन एक 8 बाइट एक निर्माण करने के लिए कर सकते हैं:
#include <stdint.h>
...
uint64_t random =
(((uint64_t) rand() << 0) & 0x00000000FFFFFFFFull) |
(((uint64_t) rand() << 32) & 0xFFFFFFFF00000000ull);
rand
के बाद रिटर्न int
, और sizeof(int) >= 4
लगभग किसी भी आधुनिक मंच पर, इस कोड को काम करना चाहिए। इरादे को और स्पष्ट बनाने के लिए मैंने << 0
जोड़ा है।
0x00000000FFFFFFFF
और 0xFFFFFFFF00000000
के साथ मास्किंग sizeof(int) > 4
के मामले में दो संख्याओं में बिट्स के ओवरलैपिंग को रोकने के लिए है।
संपादित
के बाद से @Banthar टिप्पणी की है कि RAND_MAX
जरूरी 2^32
नहीं है, और मुझे लगता है कि यह कम से कम 2^16
, आप चार 2-बाइट संख्या जोड़ सकता बस सुनिश्चित करने के होने की गारंटी है:
uint64_t random =
(((uint64_t) rand() << 0) & 0x000000000000FFFFull) |
(((uint64_t) rand() << 16) & 0x00000000FFFF0000ull) |
(((uint64_t) rand() << 32) & 0x0000FFFF00000000ull) |
(((uint64_t) rand() << 48) & 0xFFFF000000000000ull);
स्रोत
2011-10-27 19:00:51
2^64 99 99 99 999 से काफी अधिक है।Windows Vista और उच्चतर पर –