1.4變量和數據類型進階

1.4變量和數據類型進階

有符號整數和無符號整數

  • short、int、long、long long類型的變量,能夠表示正數,也能夠表示負數,稱爲有符號的整數類型。
  • unsigned short、unsigned int、unsigned long、unsigned long long類型的變量,只會被看做非負數,稱爲無符號的整數類型。

有符號整數的表示方式

  • 將最左邊的位(最高位)看做「符號位」。 符號位爲0,則表示是非負數,其絕對值就是除符號位之外的部分; 符號位爲1,則表示是負數,其絕對值是全部位取反(0變1,1變0)後再加1。
  • 將一個負整數表示爲二進制的方法:
  1. 設置符號位爲1
  2. 其他位等於絕對值取反再加1 。

| 整數 | 表示成short時的二進制形式 | 十六進制形式 | | 0 | 0000 0000 0000 0000 | 0000 | | 1 | 0000 0000 0000 0001 | 0001 | | 257 | 0000 0001 0000 0001 | 0101 | | 32767 | 0111 1111 1111 1111 | 7FFF | | -32768 | 1000 0000 0000 0000 | 8000 | | -1 | 1111 1111 1111 1111 | FFFF | | -2 | 1111 1111 1111 1110 | FFFE | | -257 | 1111 1110 1111 1111 | FEFF |ios

數據類型的自動轉換

  • 有些不一樣的數據類型之間是相容的,能夠互相賦值,這叫數據類型的自動轉換
int a = 11.34; // 11.34被自動截取小數部分,轉換爲11後賦值給a
int b = 30;
double d = b; // d的值是30.0

字符類型到整型的互相轉換

  • 字符型數據能夠轉換成整型數據
int  k = 'a'; //k的內容變爲'a'的ASCII碼,即97
printf("%d", k); //輸出:97
  • 整型數據也能夠轉換爲字符型數據,但只會留下最右邊的那個字節(第0位到第7位),其餘字節被丟棄
int n = 98;
char k = n; //k的內容變爲98,98時字符'b'的ASCII碼
printf("%c", k); //輸出:b

類型自動轉換示例

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
I	int n1 = 1378; //1378的十六進制形式是 0x562
	short n2;
	char c = 'a';
	double d1 = 7.809;
	double d2;
	n2 = c+1; //n2變爲98,97是'a'的ASCII碼
	printf("c=%c, n2=%d\n", c, n2); //輸出 c=a, n2=98
	c = n1;
	printf("c=%c, n1=%d\n", c, n1); //輸出:c=b, n1=1378
	n1 = d1;  //d1=7.808,去掉小數部分後賦值給n1,n1變爲7
	printf("n1=%d\n", n1); // 輸出 n1=7
	d2 = n1;  // d2變爲7
	printf("d2=%f\n", d2); //輸出 d2=7.000000
	return 0;
}
/* Output:
c=a, n2=98
c=b, n1=1378
n1=7
d2=7.000000
*/
相關文章
相關標籤/搜索