簡體   English   中英

如何使用 get_random_bytes() 獲取 kernel 中 1-7 之間的隨機數?

[英]How can I get random numbers between 1-7 in kernel using get_random_bytes()?

int random_ticket;
get_random_bytes(&random_ticket, sizeof(random_ticket));

我試着這樣做,但我認為這種方法給出了 0 到無窮大之間的隨機數。 我不太確定如何獲得 1 到 7 之間的隨機數。

你能解釋一下我該怎么做嗎?

使用無符號數學將范圍縮小到[1...7]

%余數運算符在無符號數學中使用時類似於mod運算符。 有助於將范圍縮小到 7 個不同的值。 盡管unsigned的典型 2 32個不同值不是 7 的倍數,但引入了輕微的偏差。

unsigned random_ticket;

// () not needed with sizeof object
get_random_bytes(&random_ticket, sizeof random_ticket); 

// Best to use unsigned constants with unsigned objects.
random_ticket = 1u + (random_ticket % 7u); 

不要使用帶符號的intrandom_ticket = 1 + (random_ticket % 7); 作為random_ticket % 7返回 [-6... 6] 范圍內的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM