無符號數字與負數 程式設計細節

2021-08-18 00:21:00 字數 1125 閱讀 9614

首先執行一段程式,結果出現之前可以**一下結果哦!

#include 

#include

using

namespace

std;

int main()

else

if(sizeof("abc") < -1)

else

if(string("abc").size() < -1)

else

return

0;

}

—————————————————————分割線——————————————————————————————-

這是執行的結果:

3   yes1

4 yes2

3 yes3

3明顯是大於-1 的,,那為什麼會輸出yes呢??

因為std::size_t strlen( const char* str );它的返回型別是std::size_t。

再看size_t等同於什麼型別:

這裡說他類似與unsigned int 型別。在32位的系統中他相當於unsigned int 占有4個位元組,,但是在64位作業系統下,它相當於unsigned long 占有8個位元組,所以有可能它的值比int大。。。

一般不要使用int lenght = strlen(string_a);這樣的語句,他可能會超出int 範圍,,當然應該也沒人會一下輸入那麼長的字串。

這裡的-1 會被 轉化為乙個很大的無符號數字,

int a =-1;

unsigned

int b =a;

cout

使用上面的**測試一下:

b =4294967295

2的32次方就是4294967296,,故-1就是2的32次方減去1 。

乙個32位的負數值是-n,那麼轉化成unsigned的值是2^32 - n 。

有符號數與無符號數

關於有符號數和無符號數的一些重要知識點,包括它們在記憶體中的儲存方式 互相轉換 越界計算等。大家肯定都知道,對於有符號數,資料型別的最高位用於標示資料的符號,最高位為1表示負數,最高位為0表示正數,那麼今天我們主要就此討論乙個問題 在計算機內部具體是如何表示有符號數呢?在計算機內部是通過補碼的方式來...

無符號數與有符號數比較

2012 04 24 19 30 2555人閱讀收藏 舉報擴充套件 先出幾個題目,再解釋一下為什麼答案是那樣的。題目一 int a 1 unsigned int b 1 printf d a b 結果輸出 1 因為無符號數與有符號數比較時,要將有符號數轉化為無符號數,再來比較。a轉化為無符號數後就是...

無符號數與有符號數比較

1轉化為無符號數 65535 在計算機中負數是用補碼表示的,即反碼加1 正數直接用原碼表示 因為 1是負數就用補碼表示為 00000000 00000001 的反碼 11111111 11111110 1 即 11111111 11111111 轉換為十進位制數為65535 最高位為符號位不必考慮 ...