在C++語言中,有如下代碼:
char a;
int b;
int c;
a='1';
b=1;
printf("a = %x \r\n",a);
printf("b = %x\r\n",b);
c=a;
printf("c = %x\r\n",c);
輸出的結果是
a = 31
b = 1
c = 31
請按任意鍵繼續. . .
這裡 int型是4Byte char型是1Byet。
a=‘1’ 這條語句執行後,會在內存中分配1個字節大小的內存空間,在這個 空間裡存儲的內容是0x 31,即字符1的ASC碼的16進制表示。
b=1 這條語句執行後會在內存中分配一個4個字節大小的空間,在這個空間內存儲的內容 是0x 00000001。
c= a ; a的長度小於c的長度因此賦值不會產生數據的丟失。
看如下代碼:
char a;
int b;
a=49;
b=49;
printf("a = %x \r\n",a);
printf("b = %x \r\n",b);
輸出結果是:
a = 31
b = 31
請按任意鍵繼續. . .
這裡 a =49; 49 c++編譯器默認為10進制,49的16進制表示為 0x31 那麼在a所在的內存 中存放的依然是0x 31。
同理b在內存中存放的也是0x31。
看下面的代碼:
char a;
int b;
a=49;
b=49;
printf("a = %x \r\n",a);
printf("b = %c \r\n",b);
輸出的內容是:
a = 31
b = 1
請按任意鍵繼續. . .
這裡b輸出的是1,因為b是按照字符型來輸出的。
通過以上3個例子要說明的是,要看淡變量類型,不要被過多的變量類型搞的暈頭轉向, 看問題要看本質。不同的變量類型反映在內存中,其實只是開辟的內存大小有區別甚至內存 大小都一樣,關鍵還是要看內存空間存儲的二進制碼是什麼。兩個變量只要是在內存中存儲 的二進制碼一樣 無論這兩個變量是什麼類型,我們都可以認為他們是相等的。
看如下代碼:
char a;
int b;
float c;
a=49;
b=49;
c=49;
if(a==b)
{
printf("a和b在內存中的值一致\n");
}
if(a==c)
{
printf("a和c在內存中的值一致\n");
}
if(b==c)
{
printf("b和c在內存中的值一致\n");
}
printf("a = %x \r\n",a);
printf("b = %x \r\n",b);
printf("c = %f \r\n",c);
輸出結果如下:
a和b在內存中的值一致
a和c在內存中的值一致
b和c在內存中的值一致
a = 31
b = 31
c = 49.000000
請按任意鍵繼續. .