一,小精度往大精度轉換。
1.1c語言中比int小的整型(包括short 、unsigned short 、 unsigned char和char)在運算中都要轉換成int然後進行運算
unsigned char a; unsigned char b;
a-b>10,a和b分別先轉換成int,再計算
1.2同精度signed與unsigned比較時,轉換為unsigned比較,轉換時以資料在記憶體中的表現形式轉換
int a = -1, 記憶體0xff ff ff ff
unsigned int a;unsigned int b;
a-b>10; a-b為unsigned int,10為int,把10轉為unsigned int 來比較
2.char,unsigned char 轉為int,unsigned int時,保持原來的符號位,原來記憶體中高位為1,符號位,高位補齊1.
char a=-1,0xff--->unsigned int or int-----------(-1,0xffffffff)
無符號數保持不變
unsigned char a = 0xff->int or unsigned int
為0xff
有符號數,保持有符號數值在記憶體的表現形式
char a = 0xff->int or unsigned int
-1(0xffffffff)
二,大精度往小精度轉換
取最低位元組作為資料,即,int a = 0xfe, char b = 0xff &a; unsigned char b = 0xff &a;
記憶體中都為0xfe;
int a = 0xffff,unsigned char b = a, char b = a
有符號與無符號
最高位為1,表示這個數為負數 最高位為0,表示這個數為正數 include int main 執行結果 正數的補碼為正數本身 負數的補碼為負數的絕對值各位取反後加1 8位整數5的補碼為 0000 0101 8位整數 7的補碼為 1111 1001 16位整數20的補碼為 0000 0000 0001...
有符號與無符號討論
includeusing namespace std int main else int a2 1 unsigned char b2 1 if a2 b2 else char a3 1 unsigned int b3 1 if a3 b3 else unsigned int a4 32 int b4...
有符號數與無符號數
關於有符號數和無符號數的一些重要知識點,包括它們在記憶體中的儲存方式 互相轉換 越界計算等。大家肯定都知道,對於有符號數,資料型別的最高位用於標示資料的符號,最高位為1表示負數,最高位為0表示正數,那麼今天我們主要就此討論乙個問題 在計算機內部具體是如何表示有符號數呢?在計算機內部是通過補碼的方式來...