日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Linux对齐命令(linux对齐)

發(fā)布時(shí)間:2023/12/3 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 Linux对齐命令(linux对齐) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如何讓電腦上的圖標(biāo)排列整齊?

在WINDOWS操作系統(tǒng)(部分Linux系統(tǒng)也有桌面話的程序)下,在桌面單擊鼠標(biāo)右鍵,有個(gè)“查看”選項(xiàng),鼠標(biāo)指向它,就會(huì)出現(xiàn)復(fù)選菜單,菜單中一般有”自動(dòng)排列圖標(biāo)“和”將圖標(biāo)與網(wǎng)絡(luò)格對齊“選項(xiàng),選項(xiàng)前有 ”√“的就表示啟用了這個(gè)模式,注意的是”自動(dòng)排列圖標(biāo)“就是桌面圖標(biāo)按左側(cè)列 ,一列一列往右排列桌面,快捷方式圖標(biāo)文件等,”將圖標(biāo)與網(wǎng)絡(luò)格對齊“ 這個(gè)勾選了,就可以隨意拖放 桌面圖標(biāo),快捷方式或文件等,圖標(biāo)會(huì)按照桌面的默認(rèn)方格位置對齊

double類型使用方法?

double用作形容詞的基本意思是“雙的”,其所修飾的名詞一般為單數(shù)。用作動(dòng)詞的基本意思是“對折起來”。作名詞的基本意思是“兩倍,雙份”。

使用printf時(shí),它們具有相同的格式說明符,但使用scanf時(shí),它們沒有相同的格式說明符。

為什么是這樣?因?yàn)閜rintf的參數(shù)被提升,而scanf的參數(shù)(作為指針)卻不被提升。

這種論點(diǎn)提升到底是什么?當(dāng)較小尺寸的參數(shù)(特別是char,short和float)傳遞給可變參數(shù)函數(shù)(如printf之類的函數(shù),其參數(shù)數(shù)量不固定)時(shí),它們將轉(zhuǎn)換為較大尺寸。Char和short轉(zhuǎn)換為int,float轉(zhuǎn)換為double。

為什么這樣 據(jù)我所知,純粹出于歷史原因。C的設(shè)計(jì)師認(rèn)為這是個(gè)好主意,因?yàn)檫@些轉(zhuǎn)換基本上是免費(fèi)的,因?yàn)樗蓄愋偷某叽缍甲銐蛐。梢苑湃雴蝹€(gè)寄存器或堆棧中的單個(gè)“單元”(將內(nèi)容壓入堆棧必須與某些字節(jié)邊界對齊,例如,堆棧上的每個(gè)項(xiàng)目都必須以4的倍數(shù)的地址開頭。同樣,顯然,這種轉(zhuǎn)換減少了傳遞參數(shù)時(shí)的錯(cuò)誤。

因此,當(dāng)您向printf傳遞float類型的參數(shù)時(shí),實(shí)際上它會(huì)在轉(zhuǎn)換為printf之前就轉(zhuǎn)換為double類型。我們可以使用調(diào)試器證明這一點(diǎn)。我寫了下面的C代碼:

主要功能編譯成:

領(lǐng)取關(guān)于C/C++更多學(xué)習(xí)資料:

我在調(diào)用printf之前(在地址0x63b處)放了一個(gè)斷點(diǎn)。根據(jù)Linux x86_64調(diào)用約定,浮點(diǎn)參數(shù)在XMM寄存器中傳遞(CPU中特殊的小內(nèi)存位置,可用于對多條數(shù)據(jù)并行執(zhí)行同一條指令,但實(shí)際上可用于大多數(shù)事情) 。因此,我查看了第一個(gè)XMM寄存器xmm0,然后:

xmm0中的值之一,當(dāng)解釋為雙精度值時(shí),是1,恰好是我們傳遞給printf的值。同時(shí),當(dāng)將該寄存器中的值解釋為浮點(diǎn)數(shù)時(shí),它們是這樣(巧合的是,我們得到1.875)。因此,轉(zhuǎn)換確實(shí)發(fā)生了。這就解釋了為什么對于printf,我們在浮點(diǎn)數(shù)和雙精度參數(shù)中都使用%f -浮點(diǎn)數(shù)無論如何都會(huì)轉(zhuǎn)換為雙精度,因此printf不能分辨出兩者之間的區(qū)別。

同時(shí),scanf的參數(shù)是指針,因此不受此轉(zhuǎn)換的限制。其原因是因?yàn)樗兄羔橆愋蛢H包含內(nèi)存地址,并且所有內(nèi)存地址都具有相同的大小(在我的64位計(jì)算機(jī)上為64位)。因此,當(dāng)scanf在其格式字符串中獲得%f時(shí),它將期望一個(gè)float *類型的指針,而當(dāng)它獲得%lf時(shí),將期望得到double *類型的指針。如果格式說明符和指針的類型不匹配,則會(huì)產(chǎn)生一些有趣的結(jié)果。

由于float的大小為4個(gè)字節(jié),而double的大小為8個(gè)字節(jié)(至少在我的機(jī)器上),因此當(dāng)我們寫入float *類型的指針?biāo)赶虻奈恢脮r(shí),我們將覆蓋4個(gè)字節(jié)的內(nèi)存。同時(shí),如果我們寫入由雙*指向的位置,則將覆蓋8個(gè)字節(jié)的內(nèi)存。考慮以下代碼:

printf說明符上的.15標(biāo)志只是使printf精確度更高。由于我們使用的是雙精度值(并且正如我剛剛說的那樣,%f也適用于printf的雙精度值),因此我們實(shí)際上可以訪問具有這種精度的數(shù)字(只要它們不是太大而不能填充即可。我實(shí)際上不是對浮點(diǎn)表示非常了解)

編譯并運(yùn)行后,結(jié)果如下:

如您所見,如果我們忽略所有類型的fuckery,則數(shù)字應(yīng)該匹配,但它們甚至不相近。這是為什么?

好吧,我們給scanf%f說明符,所以它期望一個(gè)浮點(diǎn)數(shù)*。但是我們傳遞了一個(gè)雙*。現(xiàn)在,這些指針的實(shí)際值都只是地址-scanf不知道它們之間的區(qū)別。它進(jìn)行了下去,讀取我們輸入的值,并將其存儲為float 。但是浮點(diǎn)數(shù)僅占用4個(gè)字節(jié),因此scanf只會(huì)在我們可用的double變量的8個(gè)字節(jié)中寫入4個(gè)字節(jié)。在我的情況下,由于我的機(jī)器是低位字節(jié)序的,因此似乎對應(yīng)于double變量的細(xì)粒度(小有效位)數(shù)字的第4個(gè)字節(jié)將被覆蓋。因此,當(dāng)我們打印出double double back時(shí),我們得到的數(shù)字幾乎與以前相同,但最低有效數(shù)字有所變化。

總結(jié)

以上是生活随笔為你收集整理的Linux对齐命令(linux对齐)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。