sprintf("%08X", rand(0xFFFFFFFF))
một số người đề cập đến cửa sổ hạn không quá rand với MAX-Giá trị của rand (0x7FFF) hoặc rand (32768) chữ số thập phân, tôi sẽ khắc phục điều này với nhị phân chuyển-vận hành '< <'
# overcomes the windows-rand()-only-works-with-max-15bit-(32767)-limitation:
# needed 8*4==32bit random-number:
# first get the 15 high-significant bits shift them 17bits to the left,
# then the next 15bits shifted 2 bits to the left,
# then the last 2 bits with no shifting:
printf('%08X', (
(rand(0x8000)<<17) + (rand(0x8000)<<2) + rand(0b100))
);
Nhưng tôi xem xét việc này trên ly như học tập, bởi vì nó thực sự là mã vụng về khó hiểu.
Tôi sẽ không sử dụng mã này trong mã thực tế, chỉ khi tốc độ lớn nhất.
Nhưng có lẽ đó là giải pháp nhanh nhất và nó thể hiện một lược đồ để vượt qua giới hạn của rand() - chức năng dưới cửa sổ ...
Nguồn
2012-04-26 15:40:50
Golf: 'perl -e'print [0..9, A..F ] -> [rand 16] đối với 1,.8'' – daxim
Tại sao phải xuống hạng? Tôi cần học lập trình. Stackoverflow là gì nếu không phải là loại câu hỏi này? – unixman83
Tôi không bỏ phiếu cho bài đăng của bạn. Tuy nhiên, nói chung, việc loại trừ bất kỳ mô-đun CPAN nào cũng không được xem xét một cách thuận lợi. Ngoài ra, bạn dự kiến sẽ thực hiện một số nỗ lực để đưa ra một giải pháp của riêng bạn, và yêu cầu giúp đỡ với điều đó hơn là mong đợi những người khác cung cấp cho bạn các giải pháp đóng hộp. –