微軟VC編譯器對signed型別超出取值範圍的處理

2021-06-21 05:34:31 字數 860 閱讀 7105

今天在讀c++primer時有這麼一句話:物件的型別決定物件的取值。這會引起乙個疑問:當我們試著把乙個超出其取值範圍的值賦給乙個指定型別的物件時,結果會怎樣呢?答案取決於這種型別是signed還是unsigned。

對於unsigned型別來說,編譯器將會對unsigned型別求模,直到滿足範圍為止;對於signed型別來說,由編譯器決定實際賦予的值,在實踐操作中,很多編譯器處理signed型別與unsigned型別類似。

那麼對於我們常用的c/c++編譯器 vc;編譯器是如何處理signed型別的呢?

對於常見的整型int(是一種signed型別)有如下例子:

int型別在vc中由4個位元組表示,因此取值範圍為-2147483648-2147483647

顯然379997532212已經超出範圍了,輸出結果(379997532212)%(2147483648)=2040410164

這種處理方法相當於直接由低位到高位賦值,超出的部分捨去;

(379997532212)10=(0101 1000 0111 1001 1001 1110 0011 0000 0011 0100)2

(2040410164)10=(0111 1001 1001 1110 0011 0000 0011 0100)2

由此可見vc對signed型別超出取值範圍的處理與unsigned是一樣的

VC編譯器設定

工欲善其事,必先利其器 要想用 vc開發出高效率程式,必須對 vc編譯器有充分的了解。如果我們已經習慣編譯器給我的預設設定,那麼現在起開始嘗試改變吧 本篇文章 或者後續文章 講解 vc編譯器設定選項並沒有先後順序,只是作者在具體開發過程碰見了不同的編譯設定,進行深入了解,做此文章記錄。也希望讀到這篇...

VC編譯器設定

工欲善其事,必先利其器 要想用 vc開發出高效率程式,必須對 vc編譯器有充分的了解。如果我們已經習慣編譯器給我的預設設定,那麼現在起開始嘗試改變吧 本篇文章 或者後續文章 講解 vc編譯器設定選項並沒有先後順序,只是作者在具體開發過程碰見了不同的編譯設定,進行深入了解,做此文章記錄。也希望讀到這篇...

VC編譯器選項

cl.exe 是控制 microsoft c 和 c 編譯器與鏈結器的 32 位工具。編譯器產生通用物件檔案格式 coff 物件 obj 檔案。鏈結器產生可執行檔案 exe 或動態鏈結庫檔案 dll 注意,所有編譯器選項都區分大小寫。若要編譯但不鏈結,請使用 c。使用 nmake 生成輸出檔案。使用...