首頁>Club>
習慣C語言程式設計的程式設計師切換到java的時候,除了思考方式的轉變外,還有就是java對c語言有些資料型別不支援,如不支援指標資料型別,不支援無符號數。那麼對於經常解析資料的程式設計師來說,如果不支援無符號資料了型別就會感覺到java用起來不得心應手,那麼有什麼好的思路來解決這種問題呢?
8
回覆列表
  • 1 # Toshiba88

    理解了面向物件,就解了這個問題。你為什麼需要一個無符號整數。記錄年齡?那應該是個Age物件。計數器?那應該是個Counter物件。。C的無符號整型更多是在記憶體受限(C誕生的年代背景,以及在嵌入式開發的廣泛使用)情況下提供更精細的空間控制。但對於Java來說這些就沒有那麼強烈。業務場景不能接受負值應該用封裝來解決,資料範圍不夠換成long就好了。

  • 2 # 帖木兒

    問出這個問題來說明你這個C程式設計師是不合格的。

    你只知道C裡有"unsigned"型別,卻不知道這種資料的儲存方式。

    事實上,不論unsigned還是signed,整型資料的儲存方式都是完全一樣的,都是補碼錶示法,是不是signed無關,跟±運算也無關。

    比如簡單一點,一個8位整數,unsigned是0-255,signed是-128~127。兩者的儲存方式完全相同,±運算也完全相同。區別是你看資料時的理解方式,比如8位全1,unsigned 理解為255(再+1變成0),而signed理解為-1(再+1也是0)。這就是補碼錶示法的精髓,有無符號無差別,甚至加減法也幾乎無差別:補碼錶示下,減法就是取反+1。你可以在C或java程式碼裡驗證:a-b,和a+(~b)+1,二者是一樣的。

    回到題主的問題,當然先要明確程式設計師需要unsigned型別的原因和用途,不過據我的經驗,通常都只是用來計數,也只涉及到加減法和比較(比大小就是減法)。一般來說,直接改成signed就好,加減法照常使用,唯一的,在做比較時,需要稍稍處理一下,比如:

    兩個整數a,b用int儲存(實際是unsigned,可能超2³¹,此時int會理解為負數),兩者比大小不要直接if(a<b),要改成:

    int c=a-b;

    if(c<0)

  • 3 # 天一閣圖書管理員

    啊?作為一名C程式設計師,我不明白你為什麼會提出這種問題。那麼請問,如果大整數超過int64在C裡面怎麼辦啊,這C語言它也沒提供。

  • 4 # IT之州

    題主沒有理解Java的設計意圖。

    Java的主要設計目標之一是使程式碼在語言層面儘量減少隱患,規避業界已知的常見問題。體現在具體設計上,題主提到了兩個例子。

    第一個,Java的資料型別中沒有無符號整數型別,是為了規避無符號整數型別帶來的隱患。即便是C語言,長者常常告誡新學者,儘量別用無符號整數。經過幾十年的實用經驗,公認的看法是無符號整數型別弊大於利。所以,Java棄之不用。

    第二,Java語言中不見指標。Java設計師決定將指標“隱藏”起來,不給程式設計者直接使用。取而代之是用建立了抽象層來間接使用“指標”。Java的動機是透過“消滅”指標來規避相當數量的常見程式錯誤和隱患。

    既然用Java,那就用Java來思維,不能看著碗裡,想著鍋裡。C語言縱有千般好,可你在用Java了,千萬別試圖去寫C味的Java程式碼。

  • 中秋節和大豐收的關聯?
  • 三國時期,哪個武將最風流倜儻?