程序:
#include <stdio.h>
#include <limits.h>
int main( void )
{
#ifdef __CHAR_UNSIGNED__
printf( "%d\n", __CHAR_UNSIGNED__ );
#endif
printf( "%d\n", CHAR_MAX );
printf( "%d\n", CHAR_MIN );
printf( "%hhd\n", CHAR_MAX );
}
输出(在我的x86_64桌面上):
127
-128
127
这是预期的。现在,我在Raspberry Pi(ARM)上运行了相同的代码:
1
255
0
-1
所以... 显然我被误解了,某些步骤CHAR_MAX
正在输出,就像我在最后一行中期望的那样 -将CHAR_MAX
传递到未签名%hhd
的机器上的char
到255
– 将是(char)CHAR_MAX
。
(如果您要问的话,(unsigned char)CHAR_MAX
和printf()
的结果相同。)
我想念什么?
这是我在Raspberry Pi上对我自己的255
实现进行回归测试期间发生的,顺便说一句,确实打印了 $(function(){
var x = $(".container");
setTimeout(function() {
x.addClass("first");
}, 1000);
setTimeout(function() {
$(x).children().css({transition : "2s"});
$(x).css({transition : "4s"});
x.addClass("second");
}, 2000);
setTimeout(function() {
$(x).children().css({transition : "0s"});
$(x).css({transition : "0s"});
x.addClass("third");
}, 4000);
setTimeout(function() {
$(x).children().css({transition : "4s"});
$(x).css({transition : "2s"});
x.addClass("fourth");
}, 6000);
setTimeout(function() {
$(x).children().css({transition : "2s"});
$(x).css({transition : "3s"});
x.addClass("fifth");
}, 8000);
})
。所以...只有一种实现是正确的,我下沉的感觉不是我的...
答案 0 :(得分:5)
格式"%hhd"
表示带符号字节。如果传递 unsigned 字节,则从技术上讲,您具有未定义的行为。要打印 unsigned 字节,您需要使用"%hhu"
。
真正发生的情况是因为two's complement整数是如何工作的,并且0xff
等于-1
。