Cast隐含无符号整数类型?

时间:2015-01-19 23:39:21

标签: c

我是C的新手,看过(unsigned)b

等代码

这是否意味着b将是unsigned int?或者它意味着什么类型?

2 个答案:

答案 0 :(得分:3)

b将是它开始的任何类型。这不会改变

(unsigned)b评估作为b的任何值,但这取决于强制转换unsigned,这是unsigned intb同义。

如何发生这种情况完全取决于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

longlong int

的缩写

long longlong long int

的缩写

shortshort int

的缩写