16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

arc4randomの罠

Posted at

arc4randomとは?

srandで初期化を行わなくてもランダムの値をとれる
Objective-Cで使える便利メソッド

そんなarc4random使っててiphoneアプリを作ってる際に
嵌ったのでそのケースを紹介します。

なぜかマイナスの値が発生する

特定範囲のランダムな値が欲しかったので
randみたいな使い方をしてたらなぜかマイナスの値が入ってました。

// 期待する値は1〜10
// ただ時々マイナスになってしまう…
int random = ((int)arc4random()) % 10 + 1;

なんでや

arc4randomの戻り値を見るとu_int32_tなのでunsigned int

ん?unsigned int?

あ!

原因

unsigned intの値をintに変換してるから

arc4randomで2147483647以上の値が戻って来た際に
intにキャストしてるからマイナスが発生してたわけです。
まぁ、最初っから戻り値確認しとけよって話ですね。

どこかのブログとかで強制的にintに変換してるのを見かけることが
結構あるので、皆さん嵌らないように気をつけてください。

16
16
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?