每日一類 基本資料型別之Number

2021-08-21 13:00:29 字數 2031 閱讀 6851

基本資料型別中的數字型別,byte,short,int,long,float,double

1. 整數型,如byte,short,int,long,對應的包裝類byte, short, integer, long

2. 浮點型,如float, double,對應的包裝類float, double

short,存在感太低,平常基本沒有使用過。

浮點數,能繞過去就盡量繞開吧,存在精度問題,效率問題等。

大多數情況下,需要展示小數的時候,可以使用『整數』+『精度』的方式表示。按long型,按精度展示(小數點偏移)。

這裡主要介紹下整數相關的類。

自動裝箱、拆箱

有符號數、無符號數

操作符,以及其優先順序

integercache

基本型別,快取了[-128,127]之間的包裝類。這一區間的數,程式中避免使用new integer(i)來例項化物件。

private

static

class

integercache

private

integercache() {}

}

bitcount

統計int/long的二進位制表示中的位元1的個數,演算法很巧妙。

// int佔32個bit,bitcount最大數值32,用8個bit就可以表示

// 然後就是把每個bit上的『1』,『搬』到最低位上去。

public

static

intbitcount(int i)

getchars

有幾個疑問,見下面**片斷

// 大於65535時,mod(100)來轉char

// 這裡的除法,使用的 /100。

// 位移+加法,效率比乘法快多少?

q = i / 100;

// really: r = i - (q * 100);

r = i - ((q << 6) + (q << 5) + (q << 2));

// 小於65535時,使用mod(10)

// 使用乘法+位移,下面這行類似 i * 52429 / 2^19 = i / 9.9999618532

q = (i * 52429) >>> (16+3);

r = i - ((q << 3) + (q << 1)); // r = i-(q*10) ...

// 1. 為什麼需要兩個分支?

// 2. 取餘,對於100、10使用不同的運算邏輯,是效率上的考量?

highestonebit,lowestonebitreverse

// 位移運算+位運算, tbd…

自動裝箱和.valueof,對應的是同乙個物件,可以使用直等。

不過不要被迷惑了,認為所有的long.valueof都是相等的。

比較時,還要使用equals方法。

@test

public

void

testlong()

學習下位操作符

比如bitcount,可以看到原始碼中,每步之後bit的搬移情況。

@test

public void testbitcountint()

日常使用基礎型別時,主要是關注下操作符的優先順序。

另外乙個值得注意的是,大小型別轉換時,規則也是有點複雜(涉及到char,無符號,會有些特殊的約定)。

熟悉下原始碼和api,**就可能會有更好的實現方式。

位操作是個好東西,人人都需要了解一點。

Objective C之基本資料型別

整型 int integertype 5 浮點型 float floattype 3.1415 雙浮點型 double doubletype 2.2033 短整型 short int shorttype 200 長整型 long int longlongtype 7758123456767l c語言...

python之基本資料型別

1 數字型別 整形 int 1.1 作用 記錄年齡 身份證號 個數等 1.2 定義 age 18print type age 浮點型 float 1.3 作用 記錄薪資 身高 體重 1.4 定義 salary 3.3height 1.87 weight 70.3 print type salary ...

MySQL之基本資料型別

目錄基本資料型別 時間型別 列舉與集合型別 日常生活中檔案格式有很多中,並且針對不同的檔案格式會有對應不同儲存方式和處理機制 txt,pdf,word,mp4.針對不同的資料應該有對應的不同的處理機制來儲存 儲存引擎就是不同的處理機制 mysql主要儲存引擎 檢視所有的儲存引擎 show engin...