How to divide 8 bit binary into two 4 bit?

29 visualizzazioni (ultimi 30 giorni)
For example A=11001111,
i want to break it as A1=1100 and A2=1111.
How it can be done in matlab?

Risposta accettata

madhan ravi
madhan ravi il 24 Ott 2020
A = '11001111'
A = mat2cell(A, 1, [4, 4]);
celldisp(A)
  3 Commenti
sami ullah
sami ullah il 25 Ott 2020
If i change A to like this
A = '1100'
A = mat2cell(A, 1, [4, 4]);
celldisp(A)
it gives the following error
Error using mat2cell (line 97)
Input arguments, D1 through D2, must sum to each dimension of the input matrix size, [1 4].'
I need output like this
A1=0000
A2=1100
sami ullah
sami ullah il 25 Ott 2020
I did it as:
N=12;
A=dec2bin(A,8)
A=mat2cell(A, 1, [4, 4]);
celldisp(A)
And it is done
Thanks

Accedi per commentare.

Più risposte (1)

Xavier
Xavier il 20 Apr 2023
Modificato: Xavier il 20 Apr 2023
I think it would be more efficient in a bit-wise operation performing the modulus and the division.
Start with an 8-bit binary number. For example, let's use the binary number 11011010. To split this number into two 4-bit groups, we need to find the remainder of the number when divided by 16 (which is 2^4, the number of bits in a 4-bit group).
To do this, we can use the modulus operator (%), which gives us the remainder after division.
So, 11011010 % 16 = 10.
The remainder we obtained in step 2 represents the least significant 4 bits of the original number. To get the most significant 4 bits, we need to divide the original number by 16 and discard the remainder. We can use integer division to do this.
So, 11011010 / 16 = 1101.
We now have two 4-bit groups: 1101 and 1010. The first group (1101) represents the most significant 4 bits of the original number, and the second group (1010) represents the least significant 4 bits.
Therefore, the original 8-bit binary number 11011010 can be split into two 4-bit groups: 1101 and 1010.
  1 Commento
Walter Roberson
Walter Roberson il 20 Apr 2023
Note that integer division for this purpose is idivide
If you were to use a uint8() / 16 then the output uint8 would be rounded.
There are other approaches. For example,
A = randi([0 255], 5, 1, 'uint8')
A = 5×1
89 241 191 120 243
top_bits = bitand(A, 240) / 16
top_bits = 5×1
5 15 11 7 15
bottom_bits = bitand(A, 15)
bottom_bits = 5×1
9 1 15 8 3
%cross check
dec2hex(A, 2) == [dec2hex(top_bits,1), dec2hex(bottom_bits,1)]
ans = 5×2 logical array
1 1 1 1 1 1 1 1 1 1

Accedi per commentare.

Categorie

Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by