C++中ushort類型的運(yùn)算規(guī)則

c++
小樊
83
2024-08-27 12:07:33
欄目: 編程語言

在C++中,unsigned short(通常簡(jiǎn)寫為ushort)是一種無符號(hào)整數(shù)類型,其大小通常為16位(2字節(jié))

  1. 加法:當(dāng)兩個(gè)unsigned short類型的數(shù)相加時(shí),如果結(jié)果超出了unsigned short的表示范圍(即大于USHRT_MAX),則會(huì)發(fā)生模運(yùn)算(即結(jié)果對(duì)USHRT_MAX + 1取模)。這意味著結(jié)果將“環(huán)繞”到unsigned short的有效范圍內(nèi)。
unsigned short a = USHRT_MAX; // 65535
unsigned short b = 1;
unsigned short c = a + b; // 0,因?yàn)?65535 + 1 = 65536 % (65536) = 0
  1. 減法:與加法類似,當(dāng)兩個(gè)unsigned short類型的數(shù)相減時(shí),如果結(jié)果小于0(即第一個(gè)數(shù)小于第二個(gè)數(shù)),則會(huì)發(fā)生模運(yùn)算。
unsigned short a = 0;
unsigned short b = 1;
unsigned short c = a - b; // 65535,因?yàn)?0 - 1 = -1 % (65536) = 65535
  1. 乘法:當(dāng)兩個(gè)unsigned short類型的數(shù)相乘時(shí),如果結(jié)果超出了unsigned short的表示范圍,則會(huì)發(fā)生模運(yùn)算。
unsigned short a = USHRT_MAX; // 65535
unsigned short b = 2;
unsigned short c = a * b; // 131070,因?yàn)?65535 * 2 = 131070 % (65536) = 131070
  1. 除法:當(dāng)兩個(gè)unsigned short類型的數(shù)相除時(shí),如果除數(shù)為0,則會(huì)發(fā)生未定義行為(UB)。否則,結(jié)果將被截?cái)酁?code>unsigned short類型。
unsigned short a = USHRT_MAX; // 65535
unsigned short b = 2;
unsigned short c = a / b; // 32767,因?yàn)?65535 / 2 = 32767
  1. 取模:當(dāng)兩個(gè)unsigned short類型的數(shù)進(jìn)行取模運(yùn)算時(shí),如果除數(shù)為0,則會(huì)發(fā)生未定義行為(UB)。否則,結(jié)果將被截?cái)酁?code>unsigned short類型。
unsigned short a = USHRT_MAX; // 65535
unsigned short b = 2;
unsigned short c = a % b; // 1,因?yàn)?65535 % 2 = 1

需要注意的是,當(dāng)涉及到unsigned short和其他整數(shù)類型(如int、long等)之間的運(yùn)算時(shí),可能會(huì)發(fā)生隱式類型轉(zhuǎn)換。在這種情況下,較小的整數(shù)類型將被提升為較大的整數(shù)類型,然后再進(jìn)行運(yùn)算。例如,當(dāng)unsigned shortint相加時(shí),unsigned short將被提升為int,然后再進(jìn)行加法運(yùn)算。

0