"unsigned int"打印为负数?

Mic*_*ael 5 objective-c

我拿一个整数,在这种情况下是192,然后左移24个空格.看来,领先1正在导致它变为负面.

unsigned int i = 192;
unsigned int newnumber = i << 24;
NSLog(@"newnumber is %d",newnumber);
Run Code Online (Sandbox Code Playgroud)

我期待3,221,225,472,但我得到-1,073,741,824(为清晰起见,添加了逗号)

无符号整数不应该是负数吗?

das*_*ght 17

因为您重新解释NSLog为有符号整数.您应该使用%u查看无符号值.

具有可变数量的参数的函数无法确切地知道您传递的值的类型.这就是为什么NSLog依赖格式字符串来了解您传递的参数数量以及它们的类型.如果传递的类型与相应的格式说明符不匹配,NSLog则会信任说明符并根据它解释数据.现代编译器甚至可能会警告你.


And*_*ell 10

你想做 NSLog(@"newnumber is %u",newnumber);

%d 将其转换回有符号的int.


Gab*_*abe 7

%d表示"有符号整数"; 使用%u的"无符号整数".