最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入解析unsigned int 和 int

 更新時間:2013年08月13日 10:01:37   作者:  
以下是對unsigned int和int進行了詳細的分析介紹,需要的朋友可以過來參考下

就如同int a;一樣,int 也能被其它的修飾符修飾。除void類型外,基本數(shù)據(jù)類型之前都可以加各種類型修飾符,類型修飾符有如下四種:
1.signed----有符號,可修飾char、int。Int是默認有符號的。
2.unsigned-----無符號,修飾int 、char
3.long------長型,修飾int 、double
4.short------短型,修飾int

我們主要來看一下signed和unsigned與int之間的聯(lián)系與區(qū)別。
什么叫做有符號,什么叫做無符號
這個問題其實很簡單,比如:5和-5,5沒有符號,-5有符號。簡單吧。但是在計算機中的這種符號可不簡單。我們分別來看一下:
在說明有符號和無符號的區(qū)別之前,我們必須先知道溢出是怎么回事,因為有無符號的根本原因可以說就是因為數(shù)據(jù)出現(xiàn)了溢出現(xiàn)象導致的。

溢出:
我們知道數(shù)據(jù)在計算機中以二進制存儲,并且占據(jù)一定的空間,而這個空間屬于計算機分配的空間。
計算機給int分配32位或者16位(不同電腦可能不同)的空間,既然空間有限,那么數(shù)值就會有限制,就會存在最大值與最小值這一說,比如:假設int類型的分配16位,無符號類型的最大值為1111 1111 1111 1111(16個1),也就是65535,如果超過了65535,這就叫做溢出,那該怎么辦? 如果要輸出65536,那將會輸出個什么東西呢? 下面和大家一起看一下:

疑問:有的讀者會問:65535這么小啊,我記得自己在輸出比65535大好多的數(shù)也能夠輸出啊。
解答: 那就是有無符號的定義和你電腦編譯器的原因了。64位的電腦和32的電腦可是不一樣的哦。而且int占幾個字節(jié)是與電腦編譯器有關(guān)的。不過現(xiàn)在大部分電腦int占4個字節(jié),即32位,那么他的最大值可是32個1(二進制)左右的數(shù)量級,你實驗過這么大的數(shù)嗎?

1.無符號整型(unsigned  int)
(1)我們都知道整型是4個字節(jié)(有些編譯器不同,可能會是2個),即32位,無符號整型當然也為32位。
(2)既然是32位,無符號整型的取值是32個0~32個1,即:0~4294967295
(3) 我們舉個例子:32位有點長,所以我們拿16位的unsigned short int 來舉例。
short int 是16位的,無符號的范圍是0~65535
就拿十進制的32767(以下的所有舉例均拿這個數(shù)字來說事了)來說,它的二進制為:
               0111 1111 1111 1111
對于無符號的整型32767來說,它的二進制的最高位稱為數(shù)據(jù)位,即那個0就是數(shù)據(jù)位,數(shù)據(jù)位是要參與運算的,如果我們把0改成1,即16個1,它的十進制就是65535(就是2的15次方+2的14次方...一直加到2的0次方),這是不同于有符號整型的。
(4) 為了進行理解(3)中的含義,做一個程序說明:

復制代碼 代碼如下:

#include <stdio.h>
main()
{
    unsigned short int a=32767,b=a+1;//定義短整型無符號
    printf("a=%u\nb=%u\n",a,b);//以無符號輸出
}




定義的時候a=32767,也就是0111 1111 1111 1111,輸出的依然是32767,
a+1=32768, 二進制為1000 0000 0000 0000,輸入依然為32768。
根據(jù)(3)中講解的,無符號整型的二進制最高位為數(shù)據(jù)位,數(shù)據(jù)位為0為1都是按照正常來算的。

2.有符號整型((signed)int)(1)int類型默認是有符號的,所以int實際上是signed int ,我們通常省略signed
(2)有符號整型也是32位。
(3)它的取值范圍就與無符號整型不同了。它的范圍是-2147483648~2147483647這個范圍可以理解為無符號整型的一半變成了負數(shù)。

32位有點長,所以我們拿16位的short int 來舉例。
short int 是16位的,有符號的范圍是-32768~32767

這個時候可能就有人發(fā)問了,32768用二進制表示為1000 0000 0000 0000,那么這個負的32768的負號又怎么理解呢?看下面
(4)舉個例子;
還是以32767為例子,它的二進制為:
      0111 1111 1111 1111
對于有符號整型32767來說,它的二進制最高位稱為符號位(而不是數(shù)據(jù)位了),符號位顧名思義就是決定正負號的,規(guī)則:0是正,1為負。
(5)列舉一個程序理解(4)的內(nèi)容

復制代碼 代碼如下:

#include <stdio.h>
main()
{
   short int a=32767,b,c,d;//定義無符號類型。
b=a+1;
c=a+2;
d=a+3;
   printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}

可以看出此時的結(jié)果竟然是這個樣子的。為什么呢?怎么回事?
其實在計算機中,負數(shù)是并不存在的,它是以二進制補碼的形式表示和存放。什么是補碼呢?

(6)什么是補碼,補碼的運算。
我們還是列舉一個簡單的例子吧!就用-6.

我們經(jīng)過以上的學習已經(jīng)知道負數(shù)的符號位為1,所以:
 (1)-6的二進制: 1000 0000 0000 0110(稱為原碼,原碼是計算機顯示給我的)
 (2)對原碼求反碼:1111 1111 1111 1001(稱為反碼,保持符號位不變,將原碼中的0變1,1變0)
 (3)對反碼加1:1111 1111 1111 1010(稱為補碼,補碼是計算機中存儲負數(shù)的形式)
在計算機中,如果存儲的二進制是1111 1111 1111 1010,那么顯示在我們前臺的十進制數(shù)字就是-6。即:負數(shù)在計算機中是以該負數(shù)的二進制的補碼形式存儲的。

(7)了解了什么是補碼后,再來看我們上述說的那個程序:
  32767的二進制為:0111 1111 1111 1111
我們來計算一下c的值為什么會等于-32767。
c=32767+2,c的二進制為:1000 0000 0000 0001(32767的二進制+2),c的這個二進制是在計算機中存儲的補碼,需要將它轉(zhuǎn)換為原碼,也就是將c的二進制數(shù)減一再取反。得到的二進制原碼為:1111 1111 1111 1111。我們已經(jīng)說過,符號位為1,表示負值,并不參加運算,所以此二進制的十進制為:-32767。
但是,上述中,c的原碼的確是1111 1111 1111 1111,c在計算機中存儲的補碼也的確是1000 0000 0000 00010。但是-32767的由來卻有另一種理解,c的補碼是16位,32位編譯器中有32位的二進制,也就是說在16位補碼的前面還有(32-16=16)位的虛位數(shù),并不屬于計算機給short int分配的空間,但是這16位的位數(shù)當數(shù)表示正時為0,當數(shù)表示負數(shù)時為1。并且前16位的數(shù)字全部都與二進制倒數(shù)第8位的數(shù)字一致。也就是說:
  c 的補碼是   1...1 1000 0000 0000 0010(1..1表示16個1)
我們可以這樣計算:-2的7次方+2的1次方=-32767,這種理解普遍被大眾所接受,而且避免了原碼的概念。

(8)通過程序也可以發(fā)現(xiàn)一個規(guī)律,int的取值范圍是-32768~32767,把頭尾連接起來形成一個環(huán)就可以了。

相關(guān)文章

  • C++文件的操作及小實驗示例代碼詳解

    C++文件的操作及小實驗示例代碼詳解

    這篇文章主要介紹了C++文件的操作及小實驗,對于文件,它是一個流對象,對文件的操作無非是讀和寫,通過本文的學習大家將會理解文件的具體操作
    2022-05-05
  • C/C++?Qt?數(shù)據(jù)庫與ComBox實現(xiàn)多級聯(lián)動示例代碼

    C/C++?Qt?數(shù)據(jù)庫與ComBox實現(xiàn)多級聯(lián)動示例代碼

    Qt中的SQL數(shù)據(jù)庫組件可以與ComBox組件形成多級聯(lián)動效果,在日常開發(fā)中多級聯(lián)動效果應用非常廣泛,今天給大家分享二級ComBox菜單如何與數(shù)據(jù)庫形成聯(lián)動,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-12-12
  • OpenCV實現(xiàn)簡單錄屏功能

    OpenCV實現(xiàn)簡單錄屏功能

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)簡單錄屏功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • DSP中浮點轉(zhuǎn)定點運算--定點數(shù)的加減乘除運算

    DSP中浮點轉(zhuǎn)定點運算--定點數(shù)的加減乘除運算

    本文主要介紹DSP中定點數(shù)的加減乘除運算,很值得學習一下,需要的朋友可以參考一下。
    2016-06-06
  • C++開源庫nlohmann/json的介紹和使用詳解

    C++開源庫nlohmann/json的介紹和使用詳解

    nlohmann/json?是一個C++實現(xiàn)的JSON解析器,使用非常方便直觀,這篇文章主要為大家詳細介紹了nlohmann/json的簡介和使用,需要的可以參考下
    2023-12-12
  • C++中浮點數(shù)、double類型如何與0值作比較詳解

    C++中浮點數(shù)、double類型如何與0值作比較詳解

    浮點數(shù)在內(nèi)存中的存儲機制和整型數(shù)不同,其有舍入誤差,在計算機中用近似表示任意某個實數(shù),這篇文章主要介紹了C++中浮點數(shù)、double類型如何與0值作比較的相關(guān)資料,需要的朋友可以參考下
    2025-03-03
  • C++?setw()函數(shù)的具體使用

    C++?setw()函數(shù)的具體使用

    本文主要介紹了C++?setw()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • c++常量詳解

    c++常量詳解

    常量是存放固定且不可變值的,一旦確定初始值則在程序其它地方不可改變, 所以const對象必須初始化。常量一般使用const關(guān)鍵字來修飾
    2017-06-06
  • C++與Lua交互內(nèi)存分配詳解

    C++與Lua交互內(nèi)存分配詳解

    C/C++ 與 Lua 的交互是通過 lua_State 這一句柄進行交互,我們常規(guī)的創(chuàng)建都是通過 luaL_newstate 這一輔助函數(shù),這篇文章主要給大家詳細介紹了C++與Lua交互內(nèi)存分配,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2023-11-11
  • VC++角色游戲中的人物初始化模塊代碼實例

    VC++角色游戲中的人物初始化模塊代碼實例

    這篇文章主要介紹了VC++角色游戲中的人物初始化模塊,對大家學習VC++有一定的幫助,需要的朋友可以參考下
    2014-08-08

最新評論

丰台区| 石渠县| 布尔津县| 攀枝花市| 和政县| 邮箱| 西藏| 平昌县| 虹口区| 读书| 霸州市| 上饶县| 元氏县| 阜城县| 蓝田县| 苏州市| 临武县| 黔西| 民勤县| 新邵县| 澄迈县| 麟游县| 嘉禾县| 肃南| 溆浦县| 绥江县| 樟树市| 疏附县| 上杭县| 广昌县| 姚安县| 武义县| 若羌县| 商城县| 如东县| 苏尼特右旗| 沙河市| 神池县| 孟州市| 工布江达县| 集安市|