日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言中的无符号字节,C语言之有符号数和无符号数

發布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言中的无符号字节,C语言之有符号数和无符号数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們知道,在C語言中存在無符號數和有符號數(一些高級語言如Java里面是沒有無符號數的),但是對于計算機而言,其本身并不區別有符號數和無符號數,因為在計算機里面都是0或者1,但是在我們的實際使用中有時候需要使用有符號數來表示一個整數,因此我們規定,當最高位為1的時,表示為負數,最高位為0時,表示為正數。

1:有符號數和無符號數在數值上的區別。

有符號數的最高位用來表示符號,所以在最大的數值上,有符號數的最大值小于無符號數。以一個字節為例:

有符號數的取值范圍為:-128 — 0 — 127

無符號數的取值范圍為:0 — 255

2:正數和負數的轉換

轉換關系為:負數(正數) = 正數(負數)的補碼 + 1;

例如:

5? = 0000 0101

-5 = 1111 1011

實際的計算:

最大值 - 當前值 +1;

0xFF -5 +1 = -5(1111 1011)

0xFF -(-5) +1 = 5(0000 0101)

3:正負數在計算機中的存儲

在計算機中,并不存在所謂正負,具體看下面的代碼

int main(void)

{

int x = -1;

int i = 0;

unsigned int ux = (unsigned)x;

for(i = 0;i<32;i++)

{

ux = ux >> i;

if((ux & 0x01) == 0)

printf("%d = 1\r\n",i);

}

ux = (unsigned) x;

printf("ux = %d \n",ux);

printf("ux = %u \n",ux);

}

運行結果為:

111111111(32個1)

ux = -1

ux = 4294967295

原因是,當我們將 -1 通過強制類型轉換賦值給ux時,此時ux變量所對應的地址,所存放的值是-1,也就是0xFFFFFFFF,也就是說,從存儲的角度上講,-1和4294967295在計算機的存儲值都是0xFFFFFFFF,關鍵是你按怎樣的方式去解析,

ux = -1;此時我們是按%d也就是有符號×××的方式去解析這個存儲空間所對應的值,所以得到的解析結果是-1;

ux = 4294967295,此時我們是按%u也就是無符號×××的方式去解析這個存儲空間的值,所以得到的最高位就是數值位,而不是符號位。

解析過程如下,這里假設int類型為一個字節(4個字節也是一樣的原理,只是數值更大而已)權255-1

位值位值

11111

21212

41414

81818

16116116

32132132

64164164

12811281-128

所以

-1 = 1+2+4+8+16+32+64+(-128)

255 = 1+2+4+8+16+32+64+128

綜上所述,計算機中的存儲方式并不區分正負,關鍵在于程序員用什么方式去解析這塊存儲空間(地址)的值。

總結

以上是生活随笔為你收集整理的c语言中的无符号字节,C语言之有符号数和无符号数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。