当试图打印'UINT_MAX'时,我得到它-1,这是为什么?这是我在'main()'中打印的唯一一个printf语句,它打印'UINT_MAX'当试图打印UINT_MAX时,我得到-1
回答
您使用了%d
格式代码,该代码将其参数解释为有符号的int
。你在一个二进制补码系统中,所以UINT_MAX
(0xFFFFFFFF
),解释为一个有符号的int
,等于-1
。如果你想打印它被解释为unsigned
,请使用%u
。
它不是“解释为有符号整数”。这只是未定义的行为。您的格式说明符必须与您尝试打印的类型相匹配。 –
@R ..“格式说明符必须与_promoted_类型相匹配,并且如果该值可用两种类型表示,则”int“或”unsigned“使用”%d“或”%u“作为指定的异常。否则它的UB使用错误匹配的说明符/类型。 – chux
@chux:'printf'实际上没有任何这种例外,因为这两种类型的值都可以表示。也许你正在考虑'va_arg'。 –
你可以用printf()的
printf("%u\n", UINT_MAX);
您需要使用u
符,man printf打印。
为什么你得到-1与d
说明符?这是因为如何在内存中工作一个有符号的整数。
unsigned integer
从0开始,在内存中它是一个简单的二进制系统。
十进制=>二进制
- 1 => 1
- 2 => 10
- 8 => 1000
- 255 => 11111111
符号整数使用位被解释为负数,这是令人困惑的,因为无符号int的最大值在被解释为int时为-1。
例如用8位整数:
- -1 => 11111111
- -128 =>千万
- -9 => 11110111
喜欢你看,所述第一位被用来作为符号位。
尝试用这种site
- 1. EXC_BAD_ACCESS当试图打印
- 2. 当我试图打开这个活动我得到的NullPointerException
- 3. 当我打印我的代码时,我不想“..”打印尚未
- 4. UINT_MAX + 1等于什么?
- 5. 为什么UINT_MAX返回-1?
- 6. 当我尝试下载图片时,我得到了403
- 7. IndexError当试图打印二维数组
- 8. 得到一个错误,当尝试打印stringByReplacingOccurrencesOfString方法
- 9. 蟒蛇 - 当Eratosthenes数字为素数时打印“1”时不打印“0”
- 10. 所以我得到的,当我试图调试
- 11. 打印版,试图打印信息
- 12. 当我尝试打印出一个向量元素时,我会得到这些奇怪的字符!
- 13. 我尝试打印图表时缺少图例和颜色
- 14. 当试图打印时,Php表单看起来不同?
- 15. 当试图在表格中打印数据时发生SAXParseException
- 16. 当试图打印向量元素时,'operator <<'不匹配
- 17. 我得到java.io.FileNotFoundException时,试图捕捉
- 18. 当我使用UISwipeGestureRecognizer时,我得到的线程1:信号SIGABRT
- 19. 当我打印到屏幕或文件时,Expat打印出垃圾
- 20. 当我试图打印出这个指针的内容时,为什么不打印地址?
- 21. 当我尝试打开visual studio 2010时,我得到“操作无法完成”?
- 22. 我得到当我打印B1和B3 seperatly错误。但thers没有错误,如果我打印B2 seperatly ..Pls Explaine
- 23. 试图计算Pi,但只得到1
- 24. 试图打印字典到文件
- 25. 我怎样才能得到c中的打印机图标#
- 26. 当我使用打字稿时,我得到“Uncaught ReferenceError:angular is not defined”
- 27. 我得到空值时,在Lua代码打印JSON关键
- 28. 我得到指纹打印MD5认证时出错
- 29. 当我试图散点图时,如何分散绘图时间,我在'时间'上得到了keyerror?
- 30. 试图让奇数打印
请出示你的代码(最好是[MCVE(http://stackoverflow.com/help/mcve))。 –