bitshift in matlab vs ishft in fortran

1 回表示 (過去 30 日間)
Jaden Hoechstetter
Jaden Hoechstetter 2024 年 9 月 16 日
回答済み: Steven Lord 2024 年 9 月 16 日
Hi,
I am trying to convert a large 64 bit number into 2x 32 bit numbers, Here is my code:
U = bitshift(v, -24);
L = bitand(v, 0x000000ffffffs64);
This is replicated off of fortran code:
U = ishft(v, -24)
L = iand(v, Z'000000ffffff')
For value v = 2830037, the L's agree, but "bitshift(2830037, -24) = 0" and "ishft(2830037, -24) = 1".
I am confused. Any help would be appreciated!
  1 件のコメント
Shashi Kiran
Shashi Kiran 2024 年 9 月 16 日
Hi Jaden,
I see that U is zero when running the Fortran code(in onlinegdb compiler) as well. Are there any other ways to replicate the issue you are experiencing?

サインインしてコメントする。

回答 (1 件)

Steven Lord
Steven Lord 2024 年 9 月 16 日
Instead of using bit operations yourself, why not just use typecast?
t = 'int32';
x = randi([intmin(t), intmax(t)], 1, 2, t) % 2 random int32 values
x = 1×2
56777918 -1257821879
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
y = typecast(x, 'int64')
y = int64 -5402303834441491266
z = typecast(y, t)
z = 1×2
56777918 -1257821879
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
format hex
x
x = 1×2
03625cbe b5072949
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
y
y = int64
b507294903625cbe
The swapbytes function may also be of interest to you.

カテゴリ

Help Center および File ExchangeFortran with MATLAB についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by