欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
[065]?賦值運算中的類(lèi)型轉換 -- 一步一腳印 -- 編程愛(ài)好者博客


    如果賦值運算符兩側的類(lèi)型不一致,但都是數值型或字符型時(shí),在賦值時(shí)要進(jìn)行類(lèi)型轉換。

<1> 將實(shí)型數據(包括單、雙精度)賦值紿整型變量時(shí),舍棄實(shí)數的小數部分。如i為整型變量,執行“i=3.56”的結果是使i的值為3,在內存中以整數型式存儲。

<2> 將整型數據賦紿單、雙精度變量時(shí),數值不變,但以浮點(diǎn)數形式存儲到變量中,如將23賦值紿float變量f,即f=23,先將23轉換成23.00000,再存儲在f中。如將23賦紿double型變量d,即d=23,則將23補足有效位數字為23.00000000000000,然后以雙精度浮點(diǎn)形式存儲到d中。

<3> 將一個(gè)float型數據賦紿double變量時(shí),數值不變,有效位數擴展到16位,在內存中以64位(bit)存儲。將一個(gè)double型數據賦紿float變量時(shí),截取其前面7位有效數字,存放到float變量的存儲單元(32位)中。但應注意數值范圍不能溢出。如:
float f;
double d = 123.456789e100;
f = d;
就出現溢出的錯誤。

 為了驗證是否真的會(huì )溢出,寫(xiě)如下程序試驗:

#include <stdio.h>
#include <string.h>
int main()
{
    float f;
    double d = 123.456789e100;
    f = d;
    printf("%f\n", f);
    return 0;
}

在TC(Win-TC)中運行會(huì )溢出,程序會(huì )自動(dòng)退出,無(wú)任何顯示( TC中欲使結果窗口停留,需在最后加一句getch(); )。而在VC中運行可以得到如下結果:

=================================================================================
12345678900000001000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000.000000
=================================================================================

分析一下,從4開(kāi)始,到中間那個(gè)1共13位(此位非彼位''bit''哦),再從這個(gè)1算到最后是87位,合在一起剛好是100位,說(shuō)明這個(gè)結果是正確的,并未溢出??磥?lái)數據類(lèi)型在不同的編譯器中的存儲形式和表示方法還是有區別的!

<4> 字符型數據賦紿整型變量時(shí),由于字符只占1個(gè)字節,而整型變量為2個(gè)字節,因此將字符數據(8位)放到整型變量的低8位中。有兩種情況:
-1- 如果所用系統將字符處理為無(wú)符號的量或對unsigned char型變量賦值,則將字符的8位放到整型變量低8位,高8位補零。
-2- 如果所用系統(如Turbo C)將字符處理為帶符號的(即signed char),若字符最高位為0,則整型變量高8位補0; 若字符最高位為1,則高8位全補1。這稱(chēng)為"符號擴展",這樣做的目的是使數值保持不變,如變量c以整數形式輸出為-2,將c賦紿int型變量i后i的值也是-2。

<5> 將一個(gè)int、short、long型數據賦紿一個(gè)char型變量時(shí),只將其低8位原封不動(dòng)送到char型變量(即截斷)。例如:

int i = 289;
char c = ''a'';
c = i;

 由于int型變量i為289,即二進(jìn)制的0000000100100001,截斷賦紿c后就變成了00100001,即十進(jìn)制的33,如果用"%c"輸出c, 將得到字符"!"(其ASCII碼為33)。

<6> 將帶符號的整型數據(int型)賦紿long型變量時(shí),要進(jìn)行符號擴展,將整型數的16位送到long型低16位中,如果int型數據為正值(符號位為0),則long型變量的高16位補0; 如果int型變量為負值(符號位為1),則long型變量的高16位補1,以保持數值不改變。反之,若將一個(gè)long型數據賦紿一個(gè)int型變量,只將long型數據中低16位原封不動(dòng)地送到整型變量(即截斷)。例如:

int a;
long b = 8;
a = b;

 由于long型變量b為8,即二進(jìn)制的000000000 00000000 00000000 00001000,截斷賦紿a后為00000000 00001000,a值仍為8,若long型數b超出了int型數的范圍,截斷后就與原值不等了。

<7> 將unsigned int型數據賦紿long int型變量時(shí),不存在符號擴展問(wèn)題,只需將高位補0即可。將一個(gè)unsigned類(lèi)型數據賦紿一個(gè)占字節數相同的整型變量(如unsigned int -> int,unsigned long -> long,unsigned short -> short),將unsigned型變量的內容原樣送到非unsigned型變量中,但如果數據范圍超過(guò)相應整型的范圍,則會(huì )出現數據錯誤。如:

unsigned int a = 65535;
int b;
b = a;

將a整個(gè)送到b中,由于b是int型,第1位是符號位,成了負數。根據補碼知識可知,b值為-1。

 還是不放心,驗證一下:

#include <stdio.h>
#include <string.h>
int main()
{
    unsigned int a = 65535;
    int b;
    b = a;
    printf("%d\n", b);
    return 0;
}

在TC中確實(shí)是按上述說(shuō)法結果輸出為-1。而在VC中輸出的仍為65535,仔細一想,又是編譯環(huán)境的差異,在VC中,int型數據是32位的而非16位( [034] 顯示各種數據類(lèi)型的長(cháng)度),65535并未超出整型范圍,此時(shí)int最大可表示4294967295(232-1),所以如果想說(shuō)明上述問(wèn)題時(shí)在VC中應將a賦值為4294967295,結果輸出為-1。

<8> 將非unsigned型數據賦紿長(cháng)度相同的unsigned型變量,也是原樣照賦(連原有的符號位也作為數值一起傳送)。如:

#include <stdio.h>
#include <string.h>
int main()
{
    unsigned int a = 65535;
    int b = -1;
    a = b;
    printf("%u\n", a);
    return 0;
}

%u是輸出無(wú)符號數時(shí)所用格式。輸出結果TC中為65535,VC中為4294967295。

以上的賦值規則看起來(lái)比較復雜,其實(shí),不同類(lèi)型的整型數據間的賦值歸根到底就是一條:按存儲單元中的存儲形式直接傳送。只要學(xué)過(guò)補碼知識的,對以上規則是不難理解的。由于C語(yǔ)言使用靈活,在不同類(lèi)型數據之間賦值時(shí),常常會(huì )出現意想不到的結果,而編譯系統并不提示出錯,全靠程序員的經(jīng)驗來(lái)找出問(wèn)題。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C語(yǔ)言的變量和數據類(lèi)型
基本數據類(lèi)型
零基礎學(xué)C語(yǔ)言——變量、常量與數據類(lèi)型
C語(yǔ)言數據類(lèi)型
java,c,c語(yǔ)言之間基本數據類(lèi)型的比較
C 數據類(lèi)型 整理
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久