Char轉為int時高位符號擴充套件的問題

2021-07-16 10:51:54 字數 3737 閱讀 3940



一、短資料型別擴充套件為長資料型別

1、要擴充套件的短資料型別為有符號數的

進行符號擴充套件,即短資料型別的符號位填充到長資料型別的高位元組位(即比短資料型別多出的那一部分),保證擴充套件後的數值大小不變

如1:char x=10001001b; 

short y=x; 則y

的值應為

11111111 10001001b;

2:char x=00001001b; 

short y=x;  則y

的值應為

00000000 00001001b;

2、要擴充套件的短資料型別為無符號數的

進行零擴充套件,即用零來填充長資料型別的高位元組位

如1:unsigned char x=10001001b; 

short y=x; 則y

的值應為

00000000 10001001b;

2:unsigned char x=00001001b; 

short y=x;  則y

的值應為

00000000 00001001b;

二、長資料型別縮減為短資料型別

如果長資料型別的高位元組全為

1或全為

0,則會直接擷取低位元組賦給短資料型別;如果長資料型別的高位元組不全為

1或不全為

0,則轉會就會發生錯誤。

三、同一長度的資料型別中有符號數與無符號數的相互轉化

直接將記憶體中的資料賦給要轉化的型別,數值大小則會發生變化。另短型別擴充套件為長型別時,但短型別與長型別分屬有符號數與無符號數時,則先按規則一進行型別的擴充套件,再按本規則直接將記憶體中的數值原封不動的賦給對方。

附:有符號數的轉換 從

到方法char

short

符號位擴充套件

char

long

符號位擴充套件

char

unsigned char

最高位失去符號位意義,變為資料位

char

unsigned short

符號位擴充套件到

short;

然後從short

轉到unsigned short

char

unsigned long

符號位擴充套件到

long;

然後從long

轉到unsigned long

char

float

符號位擴充套件到

long;

然後從long

轉到float

char

double

符號位擴充套件到

long;

然後從long

轉到double

char

long double

符號位擴充套件到

long;

然後從long

轉到long double

short

char

保留低位位元組

short

long

符號位擴充套件

short

unsigned char

保留低位位元組

short

unsigned short

最高位失去符號位意義,變為資料位

short

unsigned long

符號位擴充套件到

long;

然後從long

轉到unsigned double

short

float

符號位擴充套件到

long;

然後從long

轉到float

short

double

符號位擴充套件到

long;

然後從long

轉到double

short

long double

符號位擴充套件到

long;

然後從long

轉到double

long

char

保留低位位元組

long

short

保留低位位元組

long

unsigned char

保留低位位元組

long

unsigned short

保留低位位元組

long

unsigned long

最高位失去符號位意義,變為資料位

long

float

使用單精度浮點數表示。可能丟失精度。

long

double

使用雙精度浮點數表示。可能丟失精度。

long

long double

使用雙精度浮點數表示。可能丟失精度。

無符號數的轉換 從

到方法unsigned char

char

最高位作為符號位

unsigned char

short

0擴充套件unsigned char

long

0擴充套件unsigned char

unsigned short

0擴充套件unsigned char

unsigned long

0擴充套件unsigned char

float

轉換到long; 再從 long 轉換到float

unsigned char

double

轉換到long; 再從 long 轉換到double

unsigned char

long double

轉換到long; 再從 long 轉換到double

unsigned short

char

保留低位位元組

unsigned short

short

最高位作為符號位

unsigned short

long

0擴充套件unsigned short

unsigned char

保留低位位元組

unsigned short

unsigned long

0擴充套件unsigned short

float

轉換到long; 再從 long 轉換到float

unsigned short

double

轉換到long; 再從 long 轉換到double

unsigned short

long double

轉換到long; 再從 long 轉換到double

unsigned long

char

保留低位位元組

unsigned long

short

保留低位位元組

unsigned long

long

最高位作為符號位

unsigned long

unsigned char

保留低位位元組

unsigned long

unsigned short

保留低位位元組

unsigned long

float

轉換到long; 再從 long 轉換到float

unsigned long

double

convert directly to double

unsigned long

long double

轉換到long; 再從 long 轉換到double

java環境下char型別轉為int型別

char型別轉換為int型別 char a 1 int b int a 此時,輸出b得到的是字元 1 的ascii編碼49,其他數字甚至是字母也一樣,按此類方法輸出的都只會是ascii編碼,當然如果不強制型別轉換,直接寫作 int b a 編譯也不會出錯,不過輸出的依舊是ascii編碼。如果想直接輸...

char陣列轉為字串

c語言 如何將無符號char陣列轉為字串 unsigned char src 6 如何轉為 char 12 int main char buffer 20 維數定義大些 for int i 0 i 6 i sprintf buffer i 2,x src i 格式化輸出到buffer,每個unsig...

String轉為Int 的異常錯誤

今天用c 寫了檢查磁碟空間的小程式在伺服器執行時,出現乙個string 轉為int的異常錯誤,後動執行程式,是完全沒有問題的,只有自動執行時,才會將此錯誤暴露出來 主要原因是string 轉換為int 時,不能直接用 convert.toint32 string 的方法,應該按以下步驟去處理 1.如...