在C中进行类型转换

时间:2014-06-11 08:38:14

标签: c

c中的typcasting基本上是改变变量的大小,还是也保存变量的符号?

int a; 
signed char b = 0xf4;
unsigned char c = 0xf4;

a = (signed int)c;
a = b;

这里给出了相同的值,但是一个是类型化的值,另一个是简单的签名字符。     所以在第一种情况下只增加c的值的大小

2 个答案:

答案 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

每种类型都适用。
这对于理解类型转换和限制溢出非常重要,即使大多数编译器都没有做到这一点,这也是基础知识。