Bạn có thể kết hợp hai 4-byte số nguyên ngẫu nhiên để tạo ra một 8-byte một:
#include <stdint.h>
...
uint64_t random =
(((uint64_t) rand() << 0) & 0x00000000FFFFFFFFull) |
(((uint64_t) rand() << 32) & 0xFFFFFFFF00000000ull);
Kể từ rand
lợi nhuận int
, và sizeof(int) >= 4
trên hầu hết các nền tảng hiện đại, mã này nên làm việc. Tôi đã thêm << 0
để làm cho mục đích rõ ràng hơn.
Mặt nạ với 0x00000000FFFFFFFF
và 0xFFFFFFFF00000000
là để ngăn sự chồng chéo của các bit trong hai số trong trường hợp sizeof(int) > 4
.
EDIT
Kể từ @Banthar nhận xét rằng RAND_MAX
không nhất thiết phải 2^32
, và tôi nghĩ rằng nó được đảm bảo có ít nhất 2^16
, bạn có thể kết hợp bốn số 2-byte chỉ để đảm bảo:
uint64_t random =
(((uint64_t) rand() << 0) & 0x000000000000FFFFull) |
(((uint64_t) rand() << 16) & 0x00000000FFFF0000ull) |
(((uint64_t) rand() << 32) & 0x0000FFFF00000000ull) |
(((uint64_t) rand() << 48) & 0xFFFF000000000000ull);
Nguồn
2011-10-27 19:00:51
2^64 lớn hơn nhiều so với 999999999. –