num2bin

バージョン 1.0.1 (13.8 KB) 作成者: John D'Errico
Expression of all numbers in a variety of binary forms.
ダウンロード: 30
更新 2023/1/3

ライセンスの表示

num2bin is a tool that performs extraction of the bits of a number in MATLAB. It returns a struct that contains multiple fields, which show the number in all forms.
Single and double precision numbers are resolved, as well as negative numbers.
num2bin(single(-0.1))
ans =
struct with fields:
Class: 'single'
Sign: -1
Exponent: -4
Mantissa: '110011001100110011001101'
BinaryExpansion: [-4 -5 -8 -9 -12 -13 -16 -17 -20 -21 -24 -25 -27]
BiSci: '-1.10011001100110011001101 B-4'
BiCimal: '-0.000110011001100110011001101'
num2bin(1.23456789e6)
ans =
struct with fields:
Class: 'double'
Sign: 1
Exponent: 20
Mantissa: '10010110101101000011111100011110101110000101000111101'
BinaryExpansion: [20 17 15 14 12 10 9 7 2 1 0 -1 -2 -3 -7 -8 -9 -10 -12 -14 -15 -16 -21 -23 -27 -28 -29 -30 -32]
BiSci: '1.0010110101101000011111100011110101110000101000111101 B20'
BiCimal: '100101101011010000111.11100011110101110000101000111101'
Integer classes are properly handled: uint8, uint16, uint32, uint64 as well as int8, int16, int32, int64, even logical.
num2bin(uint32(123456))
ans =
struct with fields:
Class: 'uint32'
Sign: 1
Mantissa: '11110001001000000'
Exponent: 16
BinaryExpansion: [16 15 14 13 9 6]
BiSci: '1.1110001001000000 B16'
BiCimal: '11110001001000000'
Zero has a sign of 0.
num2bin(false)
ans =
struct with fields:
Class: 'logical'
Sign: 0
Exponent: 0
Mantissa: '0'
BinaryExpansion: []
BiSci: '0'
BiCimal: '0'
eps
num2bin(eps)
ans =
struct with fields:
Class: 'double'
Sign: 1
Exponent: -52
Mantissa: '10000000000000000000000000000000000000000000000000000'
BinaryExpansion: -52
BiSci: '1.0000000000000000000000000000000000000000000000000000 B-52'
BiCimal: '0.00000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000'
Denormal numbers, thus smaller than realmin, but not quite small enough to underflow into a zero are extracted. The smallest such number representable as a double would be realmin/2^52. Beyond that point we would see an underflow to zero.
num2bin(realmin/2^52)
ans =
struct with fields:
Class: 'double'
Sign: 1
Exponent: -1023
Mantissa: '00000000000000000000000000000000000000000000000000001'
BinaryExpansion: -1074
BiSci: '0.0000000000000000000000000000000000000000000000000001 B-1022'
BiCimal: '0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001'
Exact powers of 2 are representable exactly.
num2bin(2^-100)
ans =
struct with fields:
Class: 'double'
Sign: 1
Exponent: -100
Mantissa: '10000000000000000000000000000000000000000000000000000'
BinaryExpansion: -100
BiSci: '1.0000000000000000000000000000000000000000000000000000 B-100'
BiCimal: '0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000'
Note that 1/3 is a repeating decimal in base 10, but also a repeating decimal in base 2. In base 2, 1/3 repeats the binary "digits": '01' forever.
num2bin(1/3)
ans =
struct with fields:
Class: 'double'
Sign: 1
Exponent: -2
Mantissa: '10101010101010101010101010101010101010101010101010101'
BinaryExpansion: [-2 -4 -6 -8 -10 -12 -14 -16 -18 -20 -22 -24 -26 -28 -30 -32 -34 -36 -38 -40 -42 -44 -46 -48 -50 -52 -54]
BiSci: '1.0101010101010101010101010101010101010101010101010101 B-2'
BiCimal: '0.010101010101010101010101010101010101010101010101010101'
Similarly, 1/5 has a finite expansion in base 10 (thus 0.2), yet is infinitely repeating in base 2.
num2bin(1/5)
ans =
struct with fields:
Class: 'double'
Sign: 1
Exponent: -3
Mantissa: '11001100110011001100110011001100110011001100110011010'
BinaryExpansion: [-3 -4 -7 -8 -11 -12 -15 -16 -19 -20 -23 -24 -27 -28 -31 -32 -35 -36 -39 -40 -43 -44 -47 -48 -51 -52 -54]
BiSci: '1.1001100110011001100110011001100110011001100110011010 B-3'
BiCimal: '0.0011001100110011001100110011001100110011001100110011010'
inf - an overflow, as a single, stored as 2^128. As a double, effectively 2^1024.
num2bin(single(-inf))
ans =
struct with fields:
Class: 'single'
Sign: -1
Exponent: 128
Mantissa: '100000000000000000000000'
BinaryExpansion: 128
BiSci: '-1.00000000000000000000000 B128'
BiCimal: '-1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
NaN? what do you expect to see in this case? It is not a number.
num2bin(NaN)
ans =
struct with fields:
Class: 'double'
Sign: NaN
Exponent: NaN
Mantissa: '1000000000000000000000000000000000000000000000000000'
BinaryExpansion: 'NaN'
BiSci: 'NaN'
BiCimal: 'NaN'

引用

John D'Errico (2024). num2bin (https://www.mathworks.com/matlabcentral/fileexchange/122792-num2bin), MATLAB Central File Exchange. に取得済み.

MATLAB リリースの互換性
作成: R2022b
すべてのリリースと互換性あり
プラットフォームの互換性
Windows macOS Linux
タグ タグを追加

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
バージョン 公開済み リリース ノート
1.0.1

Just a fix in the documentation.

1.0.0