1樓:
大致了解簡單的過程,我們知道機器執行的都是機器碼,加減乘除這些在硬體層面CPU都提供對應的指令(我們能讀懂的是彙編指令),編譯器在編譯的時候直接將高階語言的加減乘除轉化為對應的CPU指令,完成對應的運算。
比如intel彙編中:
加法, addl
減法,subl
乘法, imull
除法,idivl
比如我寫了以下幾個加減乘除的函式:
// Type your code here, or load an example.
intadd
(inti,
intj
)int
sub(
inti
,intj)
intmultiply
(inti,
intj
)int
div(
inti
,intj)
使用gcc編譯輸出彙編檔案
add(
int,
int):
pushq
%rbp
movq
%rsp,%
rbpmovl
%edi,-
4(%rbp
)movl
%esi,-
8(%rbp
)movl-4
(%rbp),
%edx
movl-8
(%rbp),
%eax
addl
%edx,%
eaxpopq
%rbp
retsub
(int
,int
):pushq
%rbp
movq
%rsp,%
rbpmovl
%edi,-
4(%rbp
)movl
%esi,-
8(%rbp
)movl-4
(%rbp),
%eax
subl-8
(%rbp),
%eax
popq
%rbp
retmultiply
(int
,int
):pushq
%rbp
movq
%rsp,%
rbpmovl
%edi,-
4(%rbp
)movl
%esi,-
8(%rbp
)movl-4
(%rbp),
%eax
imull-8
(%rbp),
%eax
popq
%rbp
retdiv
(int
,int
):pushq
%rbp
movq
%rsp,%
rbpmovl
%edi,-
4(%rbp
)movl
%esi,-
8(%rbp
)movl-4
(%rbp),
%eax
cltd
idivl-8
(%rbp)
popq
%rbp
ret這幾個函式都沒做什麼編譯優化,前面的pushq movl等操作都是在準備引數,關鍵的幾個就是對應的加減乘除指令,然後返回對應的值。還有這些是簡單的整數運算,對於浮點數運算,現在CPU都帶有浮點運算單元,理論上也提供相應的指令集(如果說錯了請打臉)。
編譯器在實現的時候會根據一些運算的情況作優化,比如 i--的操作可以優化為 + (-1), 再比如除以乘以 2^n 可以優化為移位操作。
詳細怎麼實現的要看各個編譯器的原始碼,對於這方面的知識不熟悉,可以請教一些編譯器方面的人。
加減乘除的物理意義是什麼?
翌文 知之為知之不知為不知,我真不知道是什麼。但我想應該體現的是各個物理量之間是可以互相轉換的吧!就像質能方程體現了質量能轉換成能量,還有相對論的時間是空間的一維。能完全搞懂這些內在聯絡,估計離大一統理論不遠了。仔細體會吧! HHHHH 物理在數學上的描述是很明確的,你看單位就知道了。同量綱的物理數...
加減乘除的意義講了上百遍,例題做過上百遍,孩子仍然乙個應用題也獨立做不出來,是智商有問題嗎?
蕭蕭的札記 學習知識的過程需要自己思考,吃透嚼碎嚥下去,再吸收成自己的知識。給孩子講題,不能告訴他,要像猜謎語一樣,讓他自己想。直接說的話,是沒有意義的。引導啟發的提問,慢慢引出結果。抽象的數字理解不了,就用實物。多點耐心。 yxxxxxxxxx 首先要注意對孩子交流時的語言 動作 語氣,盡最大可能...
C語言中強制型別轉換是如何實現的?
涇渭漳淮 強制轉換時怎麼實現的?通常是由單獨的CPU指令實現的,也就是硬體實現的。5立方之後是125,125開立方之後是幾?嚴格的數學上應該是5,但實際上計算機有精度的限制,計算結果會有誤差,計算機計算得到的結果可能是4.9999999999999435452340065849之類的,將這個值直接取...