無符號與有符號

2021-09-12 15:04:46 字數 874 閱讀 3084

一,小精度往大精度轉換。

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表示正數,那麼今天我們主要就此討論乙個問題 在計算機內部具體是如何表示有符號數呢?在計算機內部是通過補碼的方式來...