1. java16進制浮點數表示法
2. c語言中p-記數法是什麼
C99 里16進制浮點數記數法。類似E,但不同。數以0x開頭(數字0字母x),然後是16進制浮點數部分,接著是p,後面是以 2為底的階碼。
例如:0xb.1ep5 其中:
b.1e 是16進制浮點數, 乘後面的p5。p5 等於 2的5次方(10進制512)。
所以化成十進制:(11+1/16.0+14/256.0) * 512.0。
(2)16進制浮點數演算法擴展閱讀:
循環結構:
循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段演算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do while循環和for循環。
四種循環可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環,因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤。
特別要注意在循環體內應包含趨於結束的語句(即循環變數值的改變),否則就可能成了一個死循環,這是初學者的一個常見錯誤。
三個循環的異同點:用while和do…while循環時,循環變數的初始化的操作應在循環體之前,而for循環一般在語句1中進行的。
while循環和for循環都是先判斷表達式,後執行循環體,而do…while循環是先執行循環體後判斷表達式,也就是說do…while的循環體最少被執行一次,而while循環和for就可能一次都不執行。
3. 十六進制轉浮點數
VB有專門的API函數CopyMemory能處理2-10進制浮點數轉換和10-2進制浮點數轉換。
下列代碼演示了10進制Single(單精度浮點型轉為16進制字元顯示的浮點數和其相反運算:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub BinToSin_Click()
Dim sinStr As String
Dim sinSj As Single
Dim Buffer(3) As Byte
Dim i As Integer
sinStr = Text2
For i = 1 To Len(Text2) Step 2
Buffer((7 - i) / 2) = Val("&H" & Mid(sinStr, i, 2))
Next
CopyMemory ByVal VarPtr(sinSj), ByVal VarPtr(Buffer(0)), 4
Text3 = sinSj
End Sub
Private Sub SinToBin_Click()
Dim i As Integer
Dim hexData As String
Dim a As Single
Dim Buffer(3) As Byte
a = Val(Text1)
CopyMemory Buffer(0), a, 4
For i = 0 To 3
If Len(Hex(Buffer(i))) = 1 Then
hexData = "0" & Hex(Buffer(i)) + hexData
Else
hexData = Hex(Buffer(i)) + hexData
End If
Next
Text2 = hexData
End Sub
4. C語言十六進制浮點數科學計數法
你的數應該這樣寫的 0xa.1f 10p
a是10
.1f表示1/16加上15/256
p10表示2的10次方(即1024)
即 0xa.1f 10p =10+ 1*(16的-1次方)+ 15*(16的-2次方) ×(2的10次方)
類似於十進制數1.23=1+2*10的-1次方+3*10的-2次方
5. 怎麼將4位元組16進制轉化成浮點數
四個位元組的十六機制數組轉浮點數:
byte[bytes=newbyte[4];
BitConverter.ToSingle(bytes,0)。
四位元組16進制數可轉換為四個二進制位元組(Bytes),從而使用Api函數來處理成單精度浮點數。以下用VB代碼處理。
VB有專門的API函數CopyMemory能處理2-10進制浮點數轉換和10-2進制浮點數轉換。
(5)16進制浮點數演算法擴展閱讀
例:
charp[4]={0x1e,0x0d,0xa8,0x3c};轉換成浮點數:0.0205140,還有如何判斷,這四個十六進制轉換成浮點數是正數還是負數。
#include<stdio.h>
intmain(void)
{floata=0.0f;unsignedchar*b
=(unsignedchar*)&a;
charc[4]={0x1e,0x0d,0xa8,0x3c};
inti=0;//printf("b1:%d ",b);
for(i=0;i<4;i++){ b[i]
=(unsignedchar)c[i]; }
//printf("b2:%d ",*b);
printf("結果為: ");printf("%f ",a);
//printf("a:%d ",a)6. 16進制浮點數如何轉化為10進制啊
最簡單的方法,先將16進制數寫成2進制數,再轉化為10進制數。由於16是2的4次方,所以每個16進制數上的每一位,可以寫成4位的2進制數
比如:
1abc=0001
1010
1011
1100
再轉換為10進制
7. 浮點數怎麼計算要詳細過程··
一個浮點數a由兩個數m和e來表示:a = m × b^e。
在任意一個這樣的系統中,我們選擇一個基數b(記數系統的基)和精度p(即使用多少位來存儲)。m(即尾數)是形如±d.ddd...ddd的p位數(每一位是一個介於0到b-1之間的整數,包括0和b-1)。如果m的第一位是非0整數,m稱作規格化的。
有一些描述使用一個單獨的符號位(s 代表+或者-)來表示正負,這樣m必須是正的。e是指數。
例如,一個指數范圍為±4的4位十進制浮點數可以用來表示43210,4.321或0.0004321,但是沒有足夠的精度來表示432.123和43212.3(必須近似為432.1和43210)。當然,實際使用的位數通常遠大於4。
(7)16進制浮點數演算法擴展閱讀:
浮點數並不一定等於小數,定點數也並不一定就是整數。
C++中的浮點數有6種,分別是:
float:單精度,32位
unsigned float:單精度無符號,32位
double:雙精度,64位
long double:高雙精度,80位
純小數要想用二進製表示,必須先進行規格化,即化為 1.xxxxx * ( 2 ^ n ) 的形式(「^」代表乘方,2 ^ n表示2的n次方)。對於一個純小數D,求n的公式如下:
n = 1 + log2(D); // 純小數求得的n必為負數
再用 D / ( 2 ^ n ) 就可以得到規格化後的小數了。接下來就是十進制到二進制的轉化問題,為了更好的理解,先來看一下10進制的純小數是怎麼表示的,假設有純小數D,它小數點後的每一位數字按順序形成一個數列:
{k1,k2,k3,...,kn}
那麼D又可以這樣表示:
D = k1 / (10 ^ 1 ) + k2 / (10 ^ 2 ) + k3 / (10 ^ 3 ) + ... + kn / (10 ^ n )
推廣到二進制中,純小數的表示法即為:
D = b1 / (2 ^ 1 ) + b2 / (2 ^ 2 ) + b3 / (2 ^ 3 ) + ... + bn / (2 ^ n )
8. 16進制的浮點數a.c等於10進制的多少
A.C (h)
=10x16^0 + 12x16^(-1)
=10.75 (d)
9. 急求十六進制轉浮點數C程序!!!
#include
<stdio.h>
#include
<stdint.h>
void
test_disassemble_float(){
float
a
=
1.0,
b
=
2.3;
uint8_t
*pa
=
(uint8_t
*)&a,
*pb
=
(uint8_t
*)&b;
printf("%f:
%02x,
%02x,
%02x,
%02x\n",
a,
pa[0],
pa[1],
pa[2],
pa[3]);
//
output:
0x00,
0x00,
0x80,
0x3f
printf("%f:
%02x,
%02x,
%02x,
%02x\n",
b,
pb[0],
pb[1],
pb[2],
pb[3]);
//
output:
0x33,
0x33,
0x13,
0x40
}
void
test_assemble_float(){
uint8_t
pa[4]
=
{0x00,
0x00,
0x80,
0x3f};
uint8_t
pb[4]
=
{0x33,
0x33,
0x13,
0x40};
printf("%f\n",
*((float
*)pa));
printf("%f\n",
*((float
*)pb));
}
int
main(){
test_disassemble_float();
test_assemble_float();
//
這兩個函數,第一個把float拆成了4個uchar,第二個用4個uchar組成了一個float;
//
剩下的就不難了吧,讀4個uchar,放到數組里,強制轉換;
//
按照你的意思,每個uchar都讀2個十六進制數字就行了;
return
0;
}
10. 16進制浮點數如何轉化為10進制
1、打開Microsoft Visual Studio 2010, 新建名字為【進制轉換示例】的程序。