怎麼理解符號整數的取值範圍 C

2021-09-05 21:03:03 字數 1141 閱讀 1692

之前我們討論到了整數有區分符號的,也就是有正負數之分。乙個典型的整數,如char。有符號和沒有符號,取值範圍是不一樣的

1. 有符號的char : 取值範圍為-128~127

2. 無符號的char : 取值範圍為0~255

首先看無符號的

1. 為什麼最小為0: 0000 0000 當然是0

2. 為什麼最大是255 : 1111 1111當然是255

這個很好理解。

然後來看有符號的。c++標準中並沒有規定如何處理符號,這個問題一般都是由各個編譯器決定怎麼處理。通常情況下的做法都是用乙個位作為符號位。這個符號位如果為1,則為負數,這個符號位如果為0,則為0或者正數。

1. 為什麼最小為-128?

1 111 1111

第乙個1表示負數,後面7個1為127.所以應該是-127的。為什麼說是-128呢?可能有的編譯器是這樣決定的:因為0~127之間,一共是128個數字。然後負數方面呢,就不需要考慮0了,因為0已經表示過了,其實就是(00000000),它不可能再用乙個(1000000)去表示另外乙個零,這毫無意義。所以,在負數方面也要128個數,加起來才是256個數。那麼從-1到-128正好是128個數。

2. 為什麼最大為127?

0 111 1111 這肯定是127.

那麼,如果說賦予給數值的值超過了範圍呢?會怎麼樣呢?

一般都是這樣處理:將實際的數值求256的模,然後返回。例如給出的300,則實際上代表的是300%256,也就是多少呢

為了演示這個效果,我寫了一段小的程式

看這個例子就知道,其實就是每隔256,又重複一遍。那麼就說明什麼呢?

但是,同樣的**在c#中的顯示卻很怪異,不知道該如何解釋了。我們看到第二列開始並沒有按照預期地出現想要的字元。又不全部是問號,詭異。。

整數的取值範圍

在大學裡面學習計算機組成原理的時候,經常搞不懂一些數的取值範圍到底是怎麼得來的,比如有的整數的取值範圍是 32768 32767,為什麼負數和正數不對稱呢?到現在自己還是很迷糊,故查閱了一些資料,現在說明一下 整型的寬度是乙個字 編譯器不同,整數的取值範圍也不同,有的編譯器整數是4個位元組 也就是2...

C語言整數的取值範圍

整數是我們生活中常用的資料型別,也是程式設計中常用的一種資料,c語言使用int關鍵字來定義整數變數 int是 integer 的簡寫 在定義變數的時候,可以加signed unsigned short和long四種修飾符。signed 有符號的,可以表示正數和負數。unsigned 無符號的,只能表...

C語言整數的取值範圍

整數是我們生活中常用的資料型別,也是程式設計中常用的一種資料,c語言使用int關鍵字來定義整數變數 int是 integer 的簡寫 在定義變數的時候,可以加signed unsigned short和long四種修飾符。signed 有符號的,可以表示正數和負數。unsigned 無符號的,只能表...