1. 程式人生 > >C語言中得到一個float值在記憶體中的16進製表示

C語言中得到一個float值在記憶體中的16進製表示









float佔據4個位元組32位,1位為符號位,8位指數位,23位尾數位。



將72.65f轉為為16進製表示
第一步:將浮點數轉換為二進位制顯示
將72.65f轉換為二進位制顯示形式為 100 1000. 101 0011 0011 0011...
整數部分轉換方法為 72不斷地除以2取餘,然後從後往前排列
72/2 = 36 餘0
36/2 = 18 餘0
18/2 = 9  餘0
9 /2 = 4  餘1
4 /2 = 2  餘0
2 /2 = 1  餘0
1 /2 = 0  餘1
所以整數部分為 100 1000
小樹部分轉換方法為,0.65不斷地乘以2 取整數部分,然後從前往後排列
0.65 * 2 = 1.3 取1
0.3  * 2 = 0.6 取0
0.6  * 2 = 1.2 取1
0.2  * 2 = 0.4 取0
0.4  * 2 = 0.8 取0
0.8  * 2 = 1.6 取1
0.6  * 2 = 1.2 取1
.
.
.
所以小數部分為101 0011 0011 0011 ...合併起來就是100 1000. 101 0011 0011 0011 ...


第二步:將小數點向左移動,直至到第一個1的右邊,記下移動的步數
100 1000. 101 0011 0011 0011... 將小數點向左移動6步,然後數字為1.0010 0010 1001 1001 1001 1001 ...
小數點後面的即為最終結果的小數部分,取23位有效數字,將23位以後的捨棄,第24為1,向前進一位(如果為0,
直接捨棄),為1.0010 0010 1001 1001 1001 101,將小數點左邊的1丟掉為.0010 0010 1001 1001 1001 101
我們移動了6步,對6進行偏移127為133 ,二進位制為 1000 0101,將這個值作為最終結果的指數部分


第三步:將整數部分小數部分對接
1000 0101 . 0010 0010 1001 1001 1001 101
現在一共是8 + 23 = 31 位,此時再在前面加上一位符號位0(正數為0,負數為1)
結果是0 1000 0101 0010 0010 1001 1001 1001 101
寫的更直觀一點 0100 0010 1001 0001 0100 1100 1100 1101


第四步:將二進位制轉換為十六進位制
即為42914ccd
所以72.65f的十六進位制為 42914ccd,如果我們在VS中將一個float變數賦值為72.65f的話,開啟記憶體視窗,
選擇4位元組整數顯示,找到該變數的起始地址,可以看見裡面填充的值就是 42914ccd







相關推薦

C語言得到一個float記憶體16表示

float佔據4個位元組32位,1位為符號位,8位指數位,23位尾數位。 例 將72.65f轉為為16進製表示 第一步:將浮點數轉換為二進位制顯示 將72.65f轉換為二進位制顯示形式為 100 1000. 101 0011 0011 0011... 整數部分轉換方法為

不同變數在記憶體的存在形式(以16表示

#include<stdio.h> int main() { char a= -1; //1111 1111 1個位元組 short b= -1; //1111 1111- 1111 1111 2個位元組

C/C++語言實現十進位制正整數轉化為2-16位制的數並輸出

<h3>/<span style="font-size:18px;">/將一個十進位制的正整數轉化為H進位制並輸出--拓展 在此先研究對於正整數的進位制轉換 以及2-16的進位制與十進位制的轉換 #include <IOSTREAM> using namespace s

C語言】輸入一個整數,求它的原碼,反碼,補碼

補碼 while src info idt IV com scan -- 1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 int m,n,a[10],i=0,y[

C語言小結--求一個整數bit位為1的個數

最近開發需要將一個數據做奇偶校驗,首先就是要計算出這個資料中bit位為1的個數,有以下幾種演算法可以達到要求: 1 方法1 我直接上程式碼,然後分析。 uint16_t get_one_in_data_1(uint16_t data) { uint16_t n = 0

C語言】統計一個字串字母、數字、空格及其它字元的數量

統計一個字串中字母、數字、空格及其它字元的數量 解法1: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> void Count(con

C語言實驗——輸入一個整數的小寫金額,轉化為大寫金額並輸出

#include <stdio.h> #include <string.h> void trans(int a) { if(a == 1)printf("壹"); else if(a == 2)printf("貳");

C語言】輸入一個整數,輸出該數二進位制表示1的個數(三種方法)

輸入一個整數,輸出該數二進位制表示中1的個數。如輸入32,輸出1.程式碼實現:方法1:與運算#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int FindOne

[c語言] 呼叫函式實現求兩個數的最大

#include<stdio.h>int max(int x, int y){int max = 0;if (x < y){max = y;}else{max = x;}return

C語言如何讓一個函式返回多個

轉載:https://jingyan.baidu.com/article/d169e1860d278d436711d854.html 一、實現方法 1.用指標和陣列(陣列名本質上是一個指標); 2.或是你根本就不要返回,設定一個巨集觀變數(全域性變數),主函式和子函式都使用,就不用返回了

C語言】實現一個函式,可以左旋字串的k個字元。

.實現一個函式,可以左旋字串中的k個字元。 AABCD左旋一個字元得到ABCDA AABCD左旋兩個字元得到BCDAA 思路: 1.如果直接進行左移,肯定會存在陣列前面的元素丟失。 解決辦法:

C語言實現 從一個字串提取一個子字串

例如: 編寫一個函式,它從一個字串中提取一個子字串。函式原型如下: int substr(char dst[], char src[],int start, int len) {} 目標是:從src陣列起始位置向後偏移start個字元的位置開始,最多複製len個非NULL字

C語言實現判斷一個整數可被3 5 7哪些數字整除

題目來源:大工慕課 連結 作者:Caleb Sung 注意事項 重點在於if, else if, else的巢狀與混合使用,因而寫法其實並不固定,達成設計目的即可。 解答示範

C語言實現計算一個檔案的單詞個數

void count_world() { int nl, nc, nw, state, c; nl = nc = nw = 0; FILE *fp; state = OUT; fp = fopen("./a.txt","r"); while((c = fget

c語言求取一個矩陣的最大及其下標

思想:將矩陣看做一個二維陣列,用scanf()函式輸入矩陣,將陣列首位設定為最大值max,將max與陣列中數按順序兩兩比較,更新max,比較到最後一位得到最終max。void main(){    int a[3][4],i,j,max,max_i,max_j;    pri

C語言:編寫一個程式統計輸入字串,各個數字、空白字元、以及其他所有字元出現的次數。

#include<stdio.h> int main() {      int c = 0;      int num_count = 0;      int emp_count = 0;      int els_count = 0;            w

做個筆記——C語言結構體成員賦一個小問題

#include<stdio.h> #include<string.h> //定義一個結構體,名為Student struct Student { int sid; int age; char name[200

c語言二分法查找數組一個數字的下標位置

sizeof 每次 中一 需要 ret amp 二分法查找 pre print int binary_search(int arr[], int k, int left, int right) { //int right = sizeof(arr) / sizeof

C語言--第0次作業(助教修訂)

abc ron lan sdn 留下 evc 存在 這樣的 職業規劃 一、首先要做的事   1. 建博客     在博客園[https://www.cnblogs.com/]申請博客。     關註牛老師的博客[http://www.cnblogs.com/c-progra

C語言實現將一個字符串翻轉

spa highlight amp false main lag temp break bcd 問題: 對於字符串char* = " abcd efg h"; 要求輸出" h efg abcd "; 字符串整體翻轉,但是裏面每一個單詞的順序不翻轉 思想:&