oracle long类型转换成字符串_数值类型在计算机中的保存形式以及类型转换的思考和尝试...
數(shù)值分為整型和浮點型兩大塊。不管是哪種類型,在計算機中都是按二進制形式存儲,只有0 和1 兩種符號。基本數(shù)據(jù)類型byte 、short 、int 、long 、float 、double 。常量有整型、浮點型和字符串。整型常量不加后綴符號代表int 類型,浮點型常量不加后綴符號表示double 類型。
整型的保存形式
一個32位整數(shù)存儲形式如下:
++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 0 1 1 0 0 0 1 ++ 0 1 0 0 1 1 1 1 ++ 1 0 1 1 0 0 0 1 ++ 0 1 0 0 1 1 1 1 +
++++++++++++++++++++++++++++++++++++++++++++++++
在存儲有符號整型int 時,將最高位的二進制數(shù)作為符號位,0 代表整數(shù),1 代表復(fù)數(shù)。剩余可表示數(shù)值的位數(shù)只剩下31位。有符號整型在保存形式上與人類有點普通,下面做了一個嘗試:
int人為去計算1288457420的二進制表示形式,是01001100110011000100110011001100;而 -1288457420的二進制表示形式,猜測是11001100110011000100110011001100。但是實際的結(jié)果是:
//有這樣三個名詞:原碼、反碼、補碼。正數(shù)原碼等于補碼,負數(shù)補碼等于原碼不帶符號位取反再加一。
補碼這個詞在我印象中一直有個誤區(qū):“在負數(shù)參與運算時,才會進行原碼轉(zhuǎn)換補碼的轉(zhuǎn)換操作從而實現(xiàn)加法操作”。但是其實并不是。補碼是數(shù)值在計算機中的保存形式,在計算機中數(shù)值一直就是補碼形式,比如上面定義的負數(shù)i 。原碼這個詞,在計算機中并不存在,只是人類在計算補碼形式所創(chuàng)建的一個臨時的形式,計算機并不認識它。下面再做另一個測試:
int以“我們所認為的原碼形式”的二進制常量去定義一個整型i ,輸出二進制形式和十進制形式,于是我們按原碼轉(zhuǎn)十進制的方法計算得到了二進制數(shù) -1288457420。但是實際的結(jié)果:
11001100110011000100110011001100可以發(fā)現(xiàn)保存的十進制數(shù)和我們預(yù)想的不太一樣,它直接將“我們所認為的原碼形式”理解為補碼形式。這再一次證明了,計算機中并不存在所謂的原碼,二進制形式一律是補碼形式,本例中,0b11001100110011000100110011001100也被計算機理解為補碼形式,于是我們將補碼取反加一求得原碼,即可得到實際的十進制結(jié)果 -859026228
整型間的類型轉(zhuǎn)換
按byte 、short 、int 、long 的順序,類型所表示的范圍是遞增的。從低到高允許自動轉(zhuǎn)換。
byte不同類型的變量從高向低進行轉(zhuǎn)換必須使用強制轉(zhuǎn)換。
long從高到低轉(zhuǎn)換會丟失精度,計算機會截斷高位的全部數(shù)據(jù),畢竟越低的類型能表示的范圍就越小。從long向int轉(zhuǎn)換,高32位的01111111111111111111111111111111全部被舍棄,只剩低32位的11111111111111111111111111111111,最高位的1 被作為符號位。由于計算機中二進制的表示形式為補碼形式,轉(zhuǎn)換為原碼形式就是-1 。繼續(xù)往更低的類型也是一樣的道理。
整型常量向非整型變量進行類型轉(zhuǎn)換,在常量值不超過該變量能表示的范圍的情況下可以自動轉(zhuǎn)換,否則必須加強制轉(zhuǎn)換。比如int向short轉(zhuǎn)換,int向byte轉(zhuǎn)換:
short但非整型常量就沒有這樣的待遇:
int編譯器在進行運算時只有兩種精度可選32位和64位。小于等于32位的類型運算時都會得到32位整型的結(jié)果,然后再判斷其值是否超過該類型能表示的最大范圍,超過則可以自動轉(zhuǎn)換,不會編譯錯誤,否則必須添加強制轉(zhuǎn)換;如果使用變量運算,編譯器無法確定運算結(jié)果,必須添加強制轉(zhuǎn)換。以下以byte類型為例:
byte小于32位精度的short類型也是一樣的道理。賦值運算符不必加上強制轉(zhuǎn)換,賦值運算符的右側(cè)在編譯時會自動添加強制轉(zhuǎn)換符號。
byte浮點型的表示形式
后面再了解
總結(jié)
以上是生活随笔為你收集整理的oracle long类型转换成字符串_数值类型在计算机中的保存形式以及类型转换的思考和尝试...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: safari的一些问题
- 下一篇: js代码自动排版_接口测试平台代码实现9