對無符號型別的建議

2021-09-30 07:50:59 字數 617 閱讀 6534

盡量不要在你的**中使用無符號型別,以免增加不必要的複雜性。尤其是,不要僅僅因為無符數不存在負值(如年齡、國債)而用它來表示數量

盡量使用象int那樣的有符號型別,這樣在涉及公升級混合型別的複雜細節時,不必擔心邊界情況(例如-1被翻譯成非常大的正數)。

只有在使用位段和二進位制掩碼時,才可以用無符號數。應該在表示式中使用強制型別轉換,使運算元均為有符號數,或者無符號數,這樣就不必由編譯器來選擇結果的型別。

考慮下面的**:

#include

int array=;

#define total_elements (sizeof(array)/sizeof(array[0]))

int main(void)

if表示式的值卻不是真。

total_elements所定義的值是unsigned int型別(因為sizeof()的返回型別是無符號數)。if語句在signed int和unsigned int之間測試相等性,所以d被公升級為unsigned int型別,-1轉換成unsigned int的結果將是乙個非常大的正整數,致使表示式的值為假。要修正這個問題,只要對total——elements進行強制型別轉換即可:

if(d<=(int)total_elements-2)

無符號型別規則

include include using namespace std int main void unsigned boy age 男孩年齡 unsigned girl age 女孩年齡 unsigned age 年齡 cout 男孩的年齡 endl cin boy age cout 女孩的年齡 ...

有符號型別與無符號型別之間的轉換

void foo void unsigned int a 6 int b 20 a b 6 puts 6 puts 6 printf b x n b b 0xffffffec 這個問題測試你是否懂得c語言中的整數自動轉換原則 這無符號整型問題的答案是輸出是 6 原因是當表示式中存在有符號型別和無符號...

有符號型別與無符號型別值範圍

以char為例 最小值為 signed char p 0x80 最大值為 signed char q 0x7f p,最高為1時表示為負數,絕對值為2 7次方 0x80 0x7f 0xff 1 面試題int為4位元組 unsigned int p 6 signed int q 20 p q的十六進製制...