Asked by Mohsin Shah
on 6 Sep 2018

Let's say a function takes input n as the bit length and outputs a random number. For example, for n = 4, the output range is [0 - 15] which also includes the range for n = 3 i.e. [0 - 7]. The function should generate the number in the range [8 - 15] and not in the range [0 - 15]. How to do this and how to generalize it for any n?

Answer by Guillaume
on 6 Sep 2018

Accepted Answer

For n = 4 it should generate a number in the range [8-15]

If I understand correctly, you want a 4 bit random number with the MSB always set to 1. That sounds like a strange requirement, probably not thought properly, but this is simply equivalent to generating a 3 bit random number and tacking 1 as the MSB. The generic version of that (generating a n-1 bit number + MSB of 1) is:

n = 4

number = randi([1, 2^(n-1)]) + 2^(n-1) - 1

Answer by KALYAN ACHARJYA
on 6 Sep 2018

Edited by KALYAN ACHARJYA
on 6 Sep 2018

function bit_result=rand_bits(n)

result=randi([2^(n-1), 2^n]);

bit_result=de2bi(result,n)

end

Mohsin Shah
on 6 Sep 2018

KALYAN ACHARJYA
on 6 Sep 2018

@Mohsin I have edited the answer, can you verify it?

Mohsin Shah
on 6 Sep 2018

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 3 Comments

## KALYAN ACHARJYA (view profile)

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/417783-how-to-generate-a-random-number-of-n-bits-length#comment_607155

## Mohsin Shah (view profile)

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/417783-how-to-generate-a-random-number-of-n-bits-length#comment_607157

## KALYAN ACHARJYA (view profile)

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/417783-how-to-generate-a-random-number-of-n-bits-length#comment_607158

Sign in to comment.