![](/img/trans.png)
[英]Not getting hh:mm:ss output for int32_t datatype but for uint64_t getting correct output
[英]Order of int32_t to uint64_t casting
C++標准是否保證integer轉換既加寬又去掉符號是符號擴展還是零擴展?
快速測試:
int32_t s = -1;
uint64_t u = s;
在 Xcode 下產生 0xFFFFFFFFFFFFFFFF,但這是首先定義的行為嗎?
當你這樣做
uint64_t u = s;
[dcl.init]/17.9適用,其中規定:
正在初始化的 object 的初始值是初始化表達式的(可能轉換的)值。 如有必要,將使用標准轉換序列 ([conv]) 將初始化表達式轉換為目標類型的 cv 非限定版本; 不考慮用戶定義的轉換。
如果我們查看[conv] ,在積分轉換下,我們有
否則,結果是與源 integer 模 2 N一致的目標類型的唯一值,其中 N 是目標類型的寬度。
所以你保證會發生的是 -1 成為可能表示的最大數字,-2 比它少一,-3 比 -2 少一,依此類推,基本上它“環繞”。
實際上,
unsigned_type some_name = -1;
是為該無符號 integer 類型創建具有最大值的變量的規范方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.