32bitプラットフォーム上で、128bitアプリケーションを実装しようと試みています。32-bit変数または64-bit変数はサポートされているのですが、128bit変数はサポートされていません。
このような環境なのですが、プログラミングを楽にするため、またコードの可読性を確保するため、普段は128bitの変数として宣言しておき、必要に応じてその中の32-bitや64-bitのみを取り出して処理に使うようなコードを書きたいです。
このような場合、コード記述としては、構造体、つまり、
#include <stdint.h>
...
struct uint128_t{
uint64_t lo;
uint64_t hi;
}
または
struct uint128_t{
uint32_t x;
uint32_t y;
uint32_t z;
uint32_t w;
}
のようにするのが一般的な方法なのでしょうか?
周りにコードを書く人がいないため、初歩的な質問で恐縮ですが、こちらで質問させて頂きます。
よろしくお願いします。
No.1
- 回答日時:
ご使用されてるコンパイラに128bit変数のための型が定義されていないのであれば、ご質問者さまが記載したような実装で良いと思いました。
No.2ベストアンサー
- 回答日時:
目的は 128bit 符号なし整数の単純な保存という意味ではこれでもいいかもしれませんが、いくつか前提条件があります。
この構造体は下位先行型プロセッサー (Intel、VAX など) ではこれでいいのですが、上位先行型プロセッサー (PPC、Spark など) に移植する時には順序が逆になってしまいます。
また、通信ソフトの世界では常に上位先行で送信するのがルールです。
移植性を重視するコーディングに拘るなら、16x8bit のスタイルにして、
struct uint128_t {
unsigned char bF;
unsigned char bE;
unsigned char bD;
unsigned char bC;
unsigned char bB;
unsigned char bA;
unsigned char b9;
unsigned char b8;
unsigned char b7;
unsigned char b6;
unsigned char b5;
unsigned char b4;
unsigned char b3;
unsigned char b2;
unsigned char b1;
unsigned char b0;
};
または、
struct uint128_t {
unsigned char b[8];
};
とした方がいいと思います。
C 言語ではキャリーアンドボローの概念が実装されていないので、構造体の四則演算を関数定義する場合にも、バイト単位の方が移植性の高いプログラムとなります。後者の場合、将来 256bit に拡張することも容易にできます。
特に、貴方が提案した 2x64bit 方式では、繰り上がりのある演算が定義できません。
ただ、これでは演算速度に問題があるという場合には、
#if sizeof(long)
などを使って手動で最適化を図る必要があるかも知れません。
尚、特定の処理系 (x86 か x64) に限定しても良いプログラムならば、
#pragma
を使ってアセンブラマクロにしてしまうのも手です。この場合でも、処理系に依存しないコーディングスタイルを併記しておくことをお勧めします。
なるほど、勉強になります!他プラットフォームへの移植性のことまでは正直考えていませんでした。
書き込んでいただいた内容を自分なりに勉強して、精進したいと思います。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Visual Studio Code 関数の使い方について 3 2023/05/31 13:15
- Excel(エクセル) Excel 2019 32-bit版を64-bit版にするには? 8 2023/07/28 14:20
- 英語 英文和訳についての質問です。 2 2023/06/23 06:38
- Visual Basic(VBA) VBAでArrayListを使う為の「mscorlib.tlb」の参照設定について 3 2022/03/23 19:45
- その他(AV機器・カメラ) オーディオインターフェイスの24bitなど量子化bit数はどこで設定できるのでしょうか? 1 2022/06/26 07:58
- TOEFL・TOEIC・英語検定 bitとlittleは両方ともに同じ 1 2022/08/10 13:03
- 英語 わからない英文があります。 4 2022/11/16 07:25
- 英語 "-ve"の意味について 5 2022/10/27 11:28
- その他(IT・Webサービス) hi-bitの契約について 1 2023/05/04 21:48
- Excel(エクセル) 幾何学模様のセル内貼り付け 1 2023/07/11 00:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ピリオドの向こうへ」って最...
-
やっぱり恋人がいても結婚して...
-
今でいう「イケメン」。昔は何?
-
宇多田ヒカルが嫌いな方いませ...
-
声が太くて上手い女性歌手
-
愛する人の幸せを願う歌
-
タイトルや歌詞に方角「東」「...
-
♪ラ~ヴィンユゥ~~♪を歌って...
-
歌手の広瀬香美さんとMISI...
-
最近の邦楽の男性ボーカルバン...
-
男声のような女性ボーカル、ま...
-
鼻声気味の歌手を教えてくださ...
-
愛してるの言葉じゃ足りないく...
-
曲名も歌手名もわからない音楽...
-
日本人の歌手でスキャットマン...
-
「願い」という歌を歌っていたm...
-
こんにちは。ホテルが付く曲と...
-
アメリカの盲目の黒人歌手とは...
-
動詞の「走る」が歌詞に有る曲は?
-
「けい子さん」て気が強い人が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ピリオドの向こうへ」って最...
-
宇多田ヒカルが嫌いな方いませ...
-
うろ覚えな歌手がいるのですが。
-
鼻声気味の歌手を教えてくださ...
-
タイトル又は歌詞に 「 動物 」...
-
TAKE5の替え歌
-
♪ラ~ヴィンユゥ~~♪を歌って...
-
歌声がエロい、とは褒め言葉と...
-
愛してるの言葉じゃ足りないく...
-
60歳くらいのロックミュージシャン
-
やっぱり恋人がいても結婚して...
-
同じもしくは似た漢字3文字の日...
-
「夢花処女林」とはどういう意味
-
愛する人の幸せを願う歌
-
邦楽・ヒゲのアーティスト
-
名付けで、同じ部首が重なるの...
-
松山千春が「歌のうまい人と下...
-
ヴィブラートをかけずに歌う歌...
-
曲名も歌手名もわからない音楽...
-
サカナクションは世間から見て...
おすすめ情報