偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

聊一聊定點(diǎn)數(shù)和浮點(diǎn)數(shù)的存儲(chǔ)方式

存儲(chǔ) 存儲(chǔ)軟件
本文中所提到的都是基于intel x86Cpu,開發(fā)環(huán)境是基于windows 10 + vs2019。本片博客需要讀者自己明白十進(jìn)制、十六進(jìn)制、二進(jìn)制之間的轉(zhuǎn)換,文中不會(huì)介紹轉(zhuǎn)換過程,需要了解詳細(xì)過程的情查找相關(guān)資料。

 [[345531]]

本文轉(zhuǎn)載自微信公眾號(hào)「編程學(xué)習(xí)基地」,作者DeRoy 。轉(zhuǎn)載本文請(qǐng)聯(lián)系編程學(xué)習(xí)基地公眾號(hào)。  

定點(diǎn)數(shù)和浮點(diǎn)數(shù)

本文中所提到的都是基于intel x86Cpu,開發(fā)環(huán)境是基于windows 10 + vs2019。本片博客需要讀者自己明白十進(jìn)制、十六進(jìn)制、二進(jìn)制之間的轉(zhuǎn)換,文中不會(huì)介紹轉(zhuǎn)換過程,需要了解詳細(xì)過程的情查找相關(guān)資料。

首先我們簡(jiǎn)單的介紹一下計(jì)算機(jī)中數(shù)據(jù)存儲(chǔ)的基礎(chǔ)知識(shí),具體內(nèi)容在大學(xué)課程《計(jì)算機(jī)組成原理》中有詳細(xì)的介紹。計(jì)算機(jī)中對(duì)數(shù)據(jù)的存儲(chǔ)是有兩種形式,一種是以定點(diǎn)數(shù)方式存儲(chǔ)即C/C++中的char、short、int、long、longlong,另一種就是以浮點(diǎn)數(shù)的方式存儲(chǔ)即C/C++中的float、double。

定點(diǎn)數(shù)中char、short、int、long、longlong存儲(chǔ)原理都是一樣的,只是長(zhǎng)度不同,所以我們選取int型詳細(xì)介紹,浮點(diǎn)數(shù)中float、double原理也是一樣的.

其中,定點(diǎn)數(shù)和浮點(diǎn)數(shù)都是最高位表示符號(hào)位(0表示正數(shù)1表示負(fù)數(shù))其余位表示數(shù)值,字節(jié)是倒敘存數(shù)(小端模式)的也就是說高字節(jié)在左邊低字節(jié)在右邊。

定點(diǎn)數(shù)

定點(diǎn)數(shù)比較簡(jiǎn)單,計(jì)算機(jī)中存儲(chǔ)的是真實(shí)值,計(jì)算機(jī)采用4字節(jié)(32位)存儲(chǔ)int變量,例如:int value = 1 ; 則value轉(zhuǎn)化成二進(jìn)制0000 0000 0000 0000 0000 0000 0000 0001為了書寫方便我們寫成16進(jìn)制形式為00 00 00 01。由于計(jì)算機(jī)是倒敘存儲(chǔ)所以計(jì)算機(jī)中存儲(chǔ)為01 00 00 00。

浮點(diǎn)數(shù)

下面介紹一下浮點(diǎn)數(shù)float存儲(chǔ),C/C++中float存儲(chǔ)標(biāo)準(zhǔn)是基于IEEE754,具體內(nèi)容是一個(gè)數(shù)值,可以使用科學(xué)計(jì)數(shù)法方式表示,即可以寫成:

A * 2^n

其中A為尾數(shù),2為底數(shù),n為指數(shù)。

由于底數(shù)為2所以所有A都是大于1小于2,也就是都可以寫成1.xxxx*2的n次方,所以計(jì)算機(jī)為了節(jié)省空間,可以不存儲(chǔ)整數(shù)部分的1,因?yàn)樗械母↑c(diǎn)數(shù)都有那個(gè)1我們轉(zhuǎn)換的時(shí)候把那個(gè)1算進(jìn)去就可以了。n可以是正數(shù)也可以是負(fù)數(shù)(float需要加上127,double加上1023)。

浮點(diǎn)數(shù)的存儲(chǔ)是由符號(hào)位 (sign) + 指數(shù)位 (exponent) + 小數(shù)位 (fraction) 組成。

類型 符號(hào)位 指數(shù) 尾數(shù)
Float      1位(第31位) 8位(第23~30位) 23位(第0~22位)
Double   1位(第63位) 11位(第52~62位) 52位(第0~51位)

例如:float value = 12.5 ; 那么

定點(diǎn)數(shù) 浮點(diǎn)數(shù)

小數(shù)轉(zhuǎn)二進(jìn)制方法:整數(shù)部分采用除 2 取余,小數(shù)部分采用乘 2 取整法

float計(jì)算機(jī)存儲(chǔ)(小端模式)即00 00 48 41

double計(jì)算機(jī)存儲(chǔ)(小端模式)即 00 00 00 00 00 00 29 40

查看內(nèi)存驗(yàn)證結(jié)果

  1. #include<stdio.h> 
  2. int main() 
  3.     float a = 12.5; 
  4.     float* p = &a; 
  5.  
  6.     double b = 12.5; 
  7.     double* pb = &b; 
  8.  
  9.     printf("%d\n", a); 
  10.     printf("%d\n", (int)a); 
  11.     printf("%d\n", *(int*)&a); 
  12.     return 0; 

通過斷點(diǎn)查看變量a,b的地址,通過地址用內(nèi)存查看器查看對(duì)應(yīng)的內(nèi)存來驗(yàn)證

VS2019運(yùn)行至斷點(diǎn)時(shí),菜單調(diào)試->窗口->內(nèi)存->內(nèi)存1

double

內(nèi)存是不會(huì)騙人的,所以結(jié)果驗(yàn)證無誤

大端小端

大端模式:指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的高地址

例如:12345( 0x3039 ) 的存儲(chǔ)順序是 0x30、0x39

小端模式:指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的低地址

例如:12345( 0x3039 ) 的存儲(chǔ)順序是 0x39、0x30

判斷大小端

方法一:

  1. #include<stdio.h> 
  2. int main(int argc, char *argv[]) 
  3.     int i = 0x12345678; 
  4.     char c = i; 
  5.     if (c == 0x78) 
  6.     { 
  7.         printf("小端\n"); 
  8.     } 
  9.     else 
  10.     { 
  11.         printf("大端\n"); 
  12.     } 
  13.     return 0; 

方法二:

  1. #include<stdio.h> 
  2. int main(void) 
  3.     int  a = 0x12345678; 
  4.     char *p = (char *)&a; 
  5.     if (0x78 == *p) 
  6.     { 
  7.         printf("小端\n"); 
  8.     } 
  9.     else 
  10.     { 
  11.         printf("大端\n"); 
  12.     } 
  13.     return 0; 

方法三:

  1. #include<stdio.h> 
  2. typedef union NODE 
  3.     int i; 
  4.     char c; 
  5. }Node; 
  6. int main(int argc, char *argv[]) 
  7.     Node node; 
  8.     node.i = 0x12345678; 
  9.     if (0x78 == node.c) 
  10.     { 
  11.         printf("小端\n"); 
  12.     } 
  13.     else 
  14.     { 
  15.         printf("大端\n"); 
  16.     } 
  17.     return 0; 

上期第四題

  1. #include<stdio.h> 
  2. int main() 
  3.     float a = 12.5; 
  4.     printf("%d\n", a); 
  5.     printf("%d\n", (int)a); 
  6.     printf("%d\n", *(int*)&a); 
  7.     return 0; 
  • printf("%d\n", a);

printf由于類型不匹配,所以,會(huì)把float直接轉(zhuǎn)成double,double 8字節(jié),12.5f轉(zhuǎn)成十六進(jìn)制:0x4029 0000 000 00000

計(jì)算機(jī)(小端模式下)存儲(chǔ)的值為:00 00 00 00 00 00 29 40

而我們的%d要求是一個(gè)4字節(jié)的int,對(duì)于double的內(nèi)存布局,我們可以看到前四個(gè)字節(jié)是00,所以輸出自然是0了。

  • printf("%d\n", (int)a);

float強(qiáng)轉(zhuǎn)成int,省略掉小數(shù)部分,所有為12

  • printf("%d\n", (int)&a);

float 4個(gè)字節(jié),12.5f轉(zhuǎn)成二進(jìn)制是:0100 0001 0100 1000 0000 0000 0000 0000,十六進(jìn)制是:0x41480000,十進(jìn)制是:1095237632。

上期第10題

題目回顧:

  1. #include<stdio.h> 
  2. int main() 
  3.     int a = 3, b = 5; 
  4.     printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]); 
  5.     //等價(jià)printf("Hello! how is this? %s\n""super"); 
  6.     printf(&a["WHAT%c%c%c %c%c %c !\n"], 1["this"], 2["beauty"], 0["tool"], 0["is"], 3["sensitive"], 4["CCCCCC"]); 
  7.     return0; 

指針的另類用法:

  1. char arr[20] = "hello world"
  2. printf("%s\n", arr);        //從&arr[0]地址處開始讀取字符串到'\n'結(jié)束 輸出hello world 
  3. printf("%s\n", &arr[6]);    //從&arr[6]地址處開始讀取字符串到'\n'結(jié)束 輸出world 
  4. printf("%s\n", &6[arr]);    //從&arr[6]地址處開始讀取字符串到'\n'結(jié)束 輸出world 

arr[i] 其實(shí)就是 *(arr+i)也就是 *(i+arr),這個(gè)屬于語法規(guī)則,只是用的少。

  1. printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]); 
  2. //等價(jià)printf("Hello! how is this? %s\n""super"); 

在這里的"Ya!Hello! how is this? %s\n"是一個(gè)存儲(chǔ)在常量區(qū)的字符串

  1. char* p = "Ya!Hello! how is this? %s\n"
  2. char* p1 = "junk/super"
  3. printf(&a[p], &b[p1]); 
  4. printf(&p[3], &p1[5]); 

這里的數(shù)字3,5就是地址的偏移量

 

責(zé)任編輯:武曉燕 來源: 編程學(xué)習(xí)基地
相關(guān)推薦

2018-08-24 10:16:23

內(nèi)存浮點(diǎn)數(shù)存儲(chǔ)

2020-09-15 12:57:46

C 語言浮點(diǎn)數(shù)內(nèi)存

2024-08-23 08:43:08

2021-03-04 20:33:09

補(bǔ)碼小數(shù)符號(hào)位

2023-07-05 08:00:58

Redis數(shù)據(jù)庫

2017-10-16 10:42:27

前端JavaScript浮點(diǎn)數(shù)

2025-03-03 04:20:00

2018-07-03 08:48:48

對(duì)象存儲(chǔ)塊存儲(chǔ)

2018-06-25 09:32:44

2018-05-16 08:58:04

用戶畫像存儲(chǔ)

2011-05-25 14:10:38

浮點(diǎn)數(shù)

2015-12-02 10:21:34

JavaScript浮點(diǎn)數(shù)精度調(diào)整

2020-11-17 06:57:15

存儲(chǔ)互聯(lián)網(wǎng)用戶

2024-05-31 08:38:35

Python浮點(diǎn)數(shù)屬性

2018-04-27 09:22:21

數(shù)據(jù)存儲(chǔ)技巧

2023-06-02 07:45:39

2010-07-22 17:39:44

2023-07-06 13:56:14

微軟Skype

2021-10-19 14:04:28

C++類型數(shù)字

2017-12-26 10:19:14

大數(shù)據(jù)問題缺陷
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)