
No.7
- 回答日時:
>途中結果の 0x7FFF * b は 16ビット符号無し整数として処理されるのですか。
32ビットで処理してくれたら便利なのですが。0x7FFFは「int型定数」ですから「int型 * 整数型はint型」と言う規則により、int型になります。
「int型が何ビットの整数なのか?」は、処理系に依存するので、何ビットになるかは判りません。
「符号+15ビット」と言う処理系では「符号+15ビット」になり、「符号+31ビット」と言う処理系では「符号+31ビット」になります。
No.5
- 回答日時:
はい, キャストしようと何しようと「必ず 32ビットで処理してもらう」絶対的な方法は存在しません.
そもそも「ぴったり 32ビットのデータ型」というものが存在することすら保証されていません. 例えば
short: 16ビット
int: 24ビット
long: 48ビット
long long: 96ビット
という処理系があってもかまわないのです.
No.4
- 回答日時:
処理系によります。
型の指示(U 等)がなければ、整数リテラルはint型になります。
つまり
(int)(0x7fff)
です。
整数同士の演算では、基本「大きい」ほうに自動で型変換されます。
(int)(0x7fff) * b
の段階で、7fffが 「int →16ビット符号無し整数」 または、bが「16ビット符号無し整数→int」に、型変換されます。
まわりくどい書き方をしているのは、 intが何ビットか不明だからです。
intが16ビットで、16ビット符号無し整数とは unsigned int のこと、という処理系もあります。
intが32ビット、16ビット符号無し整数とは unsigned short だったとすれば、その式は次のようなキャストしたものと同等になります
a = ( unsigned short) ( (int)0x7FFF * (int)b / (int)c );
/* 32ビットで計算した結果のうち、16ビットをaに代入 */
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
long型の定数の末尾にLを付ける...
-
【#define】 defineで定義した...
-
C++/CLIでネイティブの構造体を...
-
Arduinoのプログラムについて
-
C#でオセロを作っているのです...
-
64bit → 32bit型へのキャスト
-
構造体の要素すべてに対する四...
-
DWORDの実際の型は何でしょうか
-
C++でboolにintの値を代入する...
-
最早開始時間と最遅完了時刻を...
-
【C++】関数ポインタの使い方
-
既定のコンストラクタがありま...
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
a^2の√=a が成り立たない場合
-
VB6.0での小数点の扱いについて
-
配列をnビットシフトする
-
数学 一次関数 関数 y=-3/4x+k(...
-
c languageで 簡単な質問があ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
main.c:7:43: warning: implici...
-
long型の定数の末尾にLを付ける...
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
C++のfor文について
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
intとINTの違いは?
-
C++でboolにintの値を代入する...
-
構造体の要素すべてに対する四...
-
プログラムの中で別のmainを呼...
-
エラー「invalid conversion fr...
-
GCCで暗黙の型変換の警告を出し...
-
【#define】 defineで定義した...
-
sshdログの意味
-
DDVによるメッセージの変更
-
typedef enumの使い方を教えて...
-
構造体を生成時にわざわざ初期...
-
DLLでLIBファイルが作成されない
おすすめ情報