c中的typcasting基本上是改变变量的大小,还是也保存变量的符号?
int a;
signed char b = 0xf4;
unsigned char c = 0xf4;
a = (signed int)c;
a = b;
这里给出了相同的值,但是一个是类型化的值,另一个是简单的签名字符。 所以在第一种情况下只增加c的值的大小
答案 0 :(得分:2)
正如您可以从您正在使用的名称中听到的那样,它是关于更改值的类型。
您可以在整数和浮点之间进行转换:
int x = (int) 3.14159265363;
或指针类型之间:
int a = 4711, b;
void *ap = &a;
b = *(int *) ap;
所以不,它不是关于"尺寸"。当然,如果您要投射的类型要求它,则尺寸必须改变,但并非所有演员必须改变尺寸,并且它绝对不会发生。从浮点到整数的转换通常是通过专用指令完成的,它不仅仅是丢弃位(或填充值以使其更宽)。
答案 1 :(得分:2)
是的,实际上,它与类型的大小有关。
int是4个字节,因此在内存中看起来像是:
int a = 3;
// looks like this
00000000 00000000 00000000 00000011
执行此操作时:
char b = (char)a;
它将截断以获得正确的字节数,此处为1,因此00000000 00000000 00000000 00000011
将被截断为00000011
每种类型都适用。
这对于理解类型转换和限制溢出非常重要,即使大多数编译器都没有做到这一点,这也是基础知识。