[英]Decrementing size_t on the right hand of assignment
為什么在這種情況下idx1
-1 ?
long long idx = (size_t)0 - 1;
cout << (size_t)0 - 1;
這將打印ULLONG_MAX
cout << idx;
這打印 -1
如果idx
改為 integer 會發生什么變化?
在這份聲明中
cout << (size_t)0 - 1;
由於通常的算術轉換,表達式(size_t)0 - 1
的類型是無符號 integer 類型size_t
。 因為它不能是負數,所以它的值ULLONG_MAX
(似乎在使用的系統中,類型 size_t 被定義為類型unsigned long long int
的別名)。
在這份聲明中
long long idx = (size_t)0 - 1;
初始值設定項轉換為有符號類型 long long int,即聲明的 object 的類型。 UNIT_MAX 值不能放入有符號的 long long 中,因此它給出 -1。
由於所用系統中size_t
類型的寬度與 long long int 類型的寬度相同。 所以 size_t 類型的初始化器的內部表示被解釋為 long long 類型的值,即無符號初始化器的最高有效位被認為是符號 bit.int。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.