我是C的新手,看过(unsigned)b
这是否意味着b将是unsigned int?或者它意味着什么类型?
答案 0 :(得分:3)
b
将是它开始的任何类型。这不会改变
(unsigned)b
将评估作为b
的任何值,但这取决于强制转换到unsigned
,这是unsigned int
与b
同义。
如何发生这种情况完全取决于unsigned int
的类型,该类型是否可以转换为0...UINT_MAX
,以及其中包含的值是否在#include <stdio.h>
void foo(unsigned int x)
{
printf("%u\n", x);
}
int main()
{
int b = 100;
foo((unsigned)b); // will print 100
char c = 'a';
foo((unsigned)c); // will print 97 (assuming ASCII)
short s = -10; // will print 4294967286 for 32-bit int types
// (see below for why)
foo((unsigned)s);
// won't compile, not convertible
//struct X { int val; } x;
//foo((unsigned)x);
}
之间没有受到影响{1}}或不。{/ p>
例如:
unsigned
第三个例子是可能抬起你眉毛的唯一部分。当无符号类型的可转换类型的值超出无符号类型的范围时(例如:负值不是用任何 -10
目标类型表示的相同值),则值为通过重复地将无符号目标加1表示的最大值加到超出范围的值,直到它落在无符号类型的有效范围内为止。
换句话说,由于unsigned int
不在UINT_MAX+1
的有效表示范围内,-10
会重复添加到0...UINT_MAX
(在这种情况下只需要一次),直到结果在{{1}}之内。
希望有所帮助。
答案 1 :(得分:1)
unsigned
缺少unsigned int
signed
缺少signed int
long
是long int
long long
是long long int
short
是short int