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

unsigned中無符號是什么詳析

 更新時間:2023年01月09日 11:23:44   作者:Jambo!  
unsigned為“無符號”的意思,unsigned,zerofill既為非負數(shù),用此類型可以增加數(shù)據(jù)長度,下面這篇文章主要給大家介紹了關(guān)于unsigned中無符號是什么的相關(guān)資料,需要的朋友可以參考下

前言

想要弄清什么是無符號,什么是有符號,就需要先知道數(shù)據(jù)在計算機內(nèi)是如何存儲的

數(shù)據(jù)是如何儲存的

在計算機內(nèi),數(shù)據(jù)都是以二進制的零一串的形式儲存的,并且稱帶符號的二進制數(shù)稱為機器數(shù)
整數(shù)機器數(shù)有3種形式:原碼、反碼、補碼

  • 二進制的最高位是符號位:0代表正數(shù),1代表負數(shù)。“無符號”和“有符號“中的”符號“就值得是這個符號位。
  • 按照一個數(shù)的正負,直接寫出它的二進制表示形式就是原碼
  • 正數(shù)的原碼、反碼、補碼是相同的
  • 負數(shù)的原碼、反碼、補碼要經(jīng)過計算的
    • 反碼:原碼的符號位不變,其他位按位取反
    • 補碼:反碼+1
  • 在內(nèi)存中存儲的形式是補碼

int n = 10,整形占四個字節(jié)(32bit)
00000000000000000000000000001010 原碼
00000000000000000000000000001010 反碼
00000000000000000000000000001010 補碼
int n = -10
10000000000000000000000000001010 原碼
111111111111111111111111111111110101 反碼
111111111111111111111111111111110110 補碼

什么叫無符號

前面已經(jīng)知道,數(shù)據(jù)是以二進制的形式儲存在內(nèi)存之中,并且二進制的最高位為符號位

在C語言中,將基本數(shù)據(jù)類型劃分為signed(有符號)和unsigned(無符號)兩類
signed類中,有符號,顧名思義就是二進制的最高位代表著符號位,即0位正數(shù),1為負數(shù)。
而在unsigned中,無符號,就是二進制的最高位不是符號位,它是0或1并不代表著這個二進制數(shù)為正或負

  • 初始化變量int a = 10它等價于signed int a =10因為關(guān)鍵字signed在定義的時候可以省略,C語言中默認是有符號數(shù)所以我們以往定義的整形變量都是有符號數(shù)字
  • 如果想要定義一個無符號數(shù),就必須加關(guān)鍵字unsigned,定義一個無符號的10:unsigned int a = 10
  • 這里需要注意的一點是:因為無符號數(shù)字沒有符號位這個概念,數(shù)字連符號都沒有了沒有正負之分,所以它只能表示正數(shù)
  • 但是無符號數(shù)字也能存放負數(shù),這點是無符號數(shù)字中最”妙“的點

接下來用unsigned int a = 10unsigned int a = -10舉例進行介紹

10為正數(shù),三碼都一樣,所以10的補碼為00000000000000000000000000001010 ,表面上看有無符號的10的補碼都一致,但是本質(zhì)上無符號的最高位不是符號位

-10的原碼為10000000000000000000000000001010
原碼除了符號位,其他取反加1得到反碼:111111111111111111111111111111110101
反碼加1得到補碼:111111111111111111111111111111110110
unsigned int a = -10然后把-10的補碼存到a中,所以此時無符號變量a中存放著:111111111111111111111111111111110110

因為a為無符號變量,所以111111111111111111111111111111110110的最好位1不代表著符號,所以a的本質(zhì)就是一個正數(shù),正數(shù)原碼、補碼、反碼相同,所以111111111111111111111111111111110110就是a所表示數(shù)字的原碼,所以輸出時,就會把這個二進制序列直接輸出。

接下來輸出一下無符號a的值:

int main()
{
	unsigned int a = -10;
	printf("%u\n", a);  //無符號的數(shù)用%u輸出
	return 0;
}

結(jié)果為:

這是一個很大的數(shù),我們用計算器驗證一下二進制序列111111111111111111111111111111110110的十進制數(shù)是多少:

所以無符號a輸出的結(jié)果就是以-10的補碼為原碼的正數(shù)的十進制

例題

例1

一下代碼的結(jié)果是:

#include <stdio.h>
int i;
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    return 0; 
}

A.>
B.<
C.不輸出
D.程序有問題

在C語言中,全局變量,沒有初始化,默認為0,i--后,i結(jié)果為-1,sizeof(i)按照i類型大小是4,所以按照此分析,結(jié)果應為B,但B選項是錯誤的

正確選項其實為A

因為sizeof返回值類型為無符號整形,因此編譯器會自動將左側(cè)的i轉(zhuǎn)換為無符號的整形數(shù)據(jù),-1的無符號整形是一個非常大的正數(shù),肯定超過4,所以正確選項為A

例2

//輸出的結(jié)果是什么?
int i= -20;
unsigned  int  j = 10;
printf("%d\n", i+j);
//按照補碼的形式進行運算,最后格式化成為有符號整數(shù)
  • i的原碼是:100000000000000000000000000010100
  • i的反碼是:1111111111111111111111111111111101011
  • i的補碼是:1111111111111111111111111111111101100
  • j 的補碼是:000000000000000000000000000001010
  • i+j的補碼是:1111111111111111111111111111111110110
  • i+j的原碼是: 100000000000000000000000000001010
  • i+j的值為-10,輸出-10

例3

//輸出結(jié)果?
unsigned int i;
for(i = 9; i >= 0; i--)
{
  printf("%u\n",i);
}

答案:死循環(huán)

分析:因為i為一個無符號的int,所以當i為0時,再減1不會變成負數(shù),反而會變成一個極大的數(shù),必定大于0,然后這個極大的數(shù)逐漸-1,當再次等于0時,循環(huán)上述的操作,所以此程序是死循環(huán)。

總結(jié)

到此這篇關(guān)于unsigned中無符號的文章就介紹到這了,更多相關(guān)unsigned無符號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C++中const_cast與reinterpret_cast運算符的用法

    詳解C++中const_cast與reinterpret_cast運算符的用法

    這篇文章主要介紹了C++中const_cast與reinterpret_cast運算符的用法,經(jīng)常被用于表達式中的類型轉(zhuǎn)換,需要的朋友可以參考下
    2016-01-01
  • 深入淺析C++多態(tài)性與虛函數(shù)

    深入淺析C++多態(tài)性與虛函數(shù)

    多態(tài)是指同樣的消息被不同的對象接收時導致不同的行為。本文通過實例代碼給大家介紹了C++多態(tài)性與虛函數(shù)的相關(guān)知識,感興趣的朋友一起看看吧
    2020-02-02
  • Qt利用QJson實現(xiàn)解析數(shù)組的示例詳解

    Qt利用QJson實現(xiàn)解析數(shù)組的示例詳解

    這篇文章主要為大家詳細介紹了Qt如何利用QJson實現(xiàn)解析數(shù)組功能,文中的示例代碼講解詳細,對我們學習Qt有一定幫助,需要的小伙伴可以了解一下
    2022-10-10
  • C++ 動態(tài)內(nèi)存分配詳解(new/new[]和delete/delete[])

    C++ 動態(tài)內(nèi)存分配詳解(new/new[]和delete/delete[])

    這篇文章主要介紹了C++ 動態(tài)內(nèi)存分配詳解(new/new[]和delete/delete[]),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • C++的new和delete詳解

    C++的new和delete詳解

    這篇文章主要介紹的是C++的new和delete,可以這么理解 new相當于是malloc 、delete相當于是free,下面我們就來詳情介紹,,需要的朋友可以參一考
    2021-09-09
  • C++中各種可調(diào)用對象深入講解

    C++中各種可調(diào)用對象深入講解

    這篇文章主要給大家介紹了關(guān)于C++中各種可調(diào)用對象的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • C++中如何調(diào)用C語言的代碼實現(xiàn)

    C++中如何調(diào)用C語言的代碼實現(xiàn)

    這篇文章主要介紹了C++中如何調(diào)用C語言的代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • C語言排序之?堆排序

    C語言排序之?堆排序

    這篇文章主要介紹了C語言排序之堆排序,文章基于C語言的相關(guān)資料展開詳細內(nèi)容,具有一定的參考資料,需要的小伙伴可以參考一下
    2022-04-04
  • c++函數(shù)中的指針參數(shù)與地址參數(shù)區(qū)別介紹

    c++函數(shù)中的指針參數(shù)與地址參數(shù)區(qū)別介紹

    c++函數(shù)中的指針參數(shù)與地址參數(shù)區(qū)別介紹;可供參考
    2012-11-11
  • 淺談c++中的stl中的map用法詳解

    淺談c++中的stl中的map用法詳解

    下面小編就為大家?guī)硪黄獪\談c++中的stl中的map用法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10

最新評論

华蓥市| 黔西县| 福贡县| SHOW| 威宁| 朝阳市| 建水县| 林州市| 永德县| SHOW| 舒城县| 仁布县| 沈阳市| 德州市| 宁河县| 民县| 玉门市| 将乐县| 济阳县| 安阳县| 象山县| 额济纳旗| 浠水县| 彰化县| 安图县| 五寨县| 赞皇县| 平谷区| 韩城市| 达拉特旗| 康保县| 林周县| 马尔康县| 宕昌县| 南涧| 扶风县| 宜宾市| 铜梁县| 黄山市| 策勒县| 新郑市|