c++算術演算とビット演算におけるタイプ変換とタイプ昇格規則と方法
3027 ワード
[cpp] view plain copy
using namespace std;
void main()
{
/************************************************************************/
/*結論:Memoryに記憶するのは補符号であり、格納された具体的なデータの値に基づいてバイナリに変換する.
後の形式は、このデータ型の範囲を超えると何が格納されているのか分からない、このコンパイラ関連の、境界数に対する処理方式であるべきである.(預け入れ時に何を使うかにかかわらずここでは+/-単数演算子の役割に注意)
どんな演算をしても、まずこの数がメモリに格納されているかを見なければなりません.
タイプの昇格/遮断はメモリ内のデータに対する操作であり、昇格にはが必要である.
拡張を行う:符号数なしで拡張する場合は、拡張したビットを直接ゼロにすればよい(unsignedは正数であるため).符号付き数を拡張すると、シンボルビット拡張(sign extension)が整数である元の最高ビットである
ゼロであればゼロを補い、負数であれば元の最高位が1であれば全1を補う.データカットを行う場合はです.
下位から数桁を数えて切断しますが、ここでは一般的にリトルエンドマシンを使用しています.
タイプ強制変換は、メモリに格納されているデータの表示方法でもあります.例えば、メモリ中が8000の場合(すなわち1000,000,000,000,000,000,000,000)、unsigned short intでが印刷する.
来たのは2の15回方、short intで印刷したらマイナス2の16回方
算術演算と両目のビット演算を行う場合、オペランドデータ型が一致しない場合は、まずに進む.
ラインデータArithmetical Conversionタイプアップ(実際にはアップグレードは拡張を行い、拡張後のメモリバイナリコードを強制的に何らかのデータタイプに変換して印刷する)してからの演算を開始する.
単眼ビット演算を行う場合は、まず整数アップを行い、次にInteger Promotion*/の演算を開始する.
/************************************************************************/
//目的:コンピュータ内部記憶形式(符号数なし、符号正数あり、符号負数あり、直接16進数あり;及びその//拡張後ルールとその拡張後の記憶形式) unsigned char uch1 = 0x80; //80
unsigned char uch2 = 128; //80
//注意+/-単目演算子としての役割と意味は、メモリを格納するときに、最高位を1 と書くことです.
//各データ型の表示範囲にも注意
char sch1 = -0x7f;//Memoryでは81のはず
char sch2 = 0x80;
cout
cout
unsigned usch3 = 0x7f;
unsigned ushc4 = 0x80;
cout
cout
char sch3 = 127;
char sch4 = -128;
cout
cout
unsigned uch3 = 0;
unsigned uch4 = 255;
cout
cout
char a = -0x80;
short int b = 0x7f80;
short int result = a&b;//0111 1111 1000 0000
cout <
}
転入先http://blog.csdn.net/gukesdo/article/details/6909766
class="html" name="code">#include
using namespace std;
void main()
{
/************************************************************************/
/*結論:Memoryに記憶するのは補符号であり、格納された具体的なデータの値に基づいてバイナリに変換する.
後の形式は、このデータ型の範囲を超えると何が格納されているのか分からない、このコンパイラ関連の、境界数に対する処理方式であるべきである.(預け入れ時に何を使うかにかかわらずここでは+/-単数演算子の役割に注意)
どんな演算をしても、まずこの数がメモリに格納されているかを見なければなりません.
タイプの昇格/遮断はメモリ内のデータに対する操作であり、昇格にはが必要である.
拡張を行う:符号数なしで拡張する場合は、拡張したビットを直接ゼロにすればよい(unsignedは正数であるため).符号付き数を拡張すると、シンボルビット拡張(sign extension)が整数である元の最高ビットである
ゼロであればゼロを補い、負数であれば元の最高位が1であれば全1を補う.データカットを行う場合はです.
下位から数桁を数えて切断しますが、ここでは一般的にリトルエンドマシンを使用しています.
タイプ強制変換は、メモリに格納されているデータの表示方法でもあります.例えば、メモリ中が8000の場合(すなわち1000,000,000,000,000,000,000,000)、unsigned short intでが印刷する.
来たのは2の15回方、short intで印刷したらマイナス2の16回方
算術演算と両目のビット演算を行う場合、オペランドデータ型が一致しない場合は、まずに進む.
ラインデータArithmetical Conversionタイプアップ(実際にはアップグレードは拡張を行い、拡張後のメモリバイナリコードを強制的に何らかのデータタイプに変換して印刷する)してからの演算を開始する.
単眼ビット演算を行う場合は、まず整数アップを行い、次にInteger Promotion*/の演算を開始する.
/************************************************************************/
//目的:コンピュータ内部記憶形式(符号数なし、符号正数あり、符号負数あり、直接16進数あり;及びその//拡張後ルールとその拡張後の記憶形式) unsigned char uch1 = 0x80; //80
unsigned char uch2 = 128; //80
//注意+/-単目演算子としての役割と意味は、メモリを格納するときに、最高位を1 と書くことです.
//各データ型の表示範囲にも注意
char sch1 = -0x7f;//Memoryでは81のはず
char sch2 = 0x80;
cout
cout
unsigned usch3 = 0x7f;
unsigned ushc4 = 0x80;
cout
cout
char sch3 = 127;
char sch4 = -128;
cout
cout
unsigned uch3 = 0;
unsigned uch4 = 255;
cout
cout
char a = -0x80;
short int b = 0x7f80;
short int result = a&b;//0111 1111 1000 0000
cout <
}
転入先http://blog.csdn.net/gukesdo/article/details/6909766