程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [C/C++]如何將一個無符號整型所有數據位置為1,符號整型

[C/C++]如何將一個無符號整型所有數據位置為1,符號整型

編輯:C++入門知識

[C/C++]如何將一個無符號整型所有數據位置為1,符號整型


正解:

x = -1;

-1超出無符號整型x的表達范圍,根據標准(C++11 section 4.7.2),-1將被轉化為2^n-1(n為x的bit數)。

 

不正解:

x = 0xFFFFFFFF;

這只適用於32bit整型。

 

不正解:

x = ~0;

這個被很多書認定為「標准答案」的解答也是錯的。C/C++標准支持原碼/反碼/補碼三種負數表示形式,只有在補碼環境下才會得到正確結果。(例如在反碼下,~0將得到-0,-0轉為無符號仍然是0)

那麼x = ~0u呢?

仍然是錯的。根據標准(C++11 section 2.14.2.2),字面量0u是unsigned int。那麼取反後得到的是UINT_MAX,如果x可表示的最大值不是UINT_MAX那麼結果就是錯的。

 


在c語言中,一個整型數據在內存中占四個字節,則無符號整型數據的取值范圍是哪個?

2^31-1
 

在C語言中,可以給一個無符號整型變量賦值一個負數

可以,但是結果會出錯,負數在計算機中最高位為1,作為符號標志(正數為0),但是如果賦給無符號整型變量,最高位的標志位就會變成數值位,計算時把這個1當成數值。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved