如何在字符变量中存储整数?

时间:2014-07-01 07:12:59

标签: c

下面程序中char变量data2如何存储整数值?

#include <stdio.h>
int main()
{
   int data1 = 1230;             //initialize data1 with 1230
   char data2 = data1;           //initialize data2 variable with data1 variable
   printf("data2 = %X\n",data2);         // print data2 variable
   printf("data1 = %X\n",data1);         // print data1 variable
   printf("data2 size = %d\n",sizeof(data2)); //print size of data2 variable
   return 0;
}

 answer:
data2 = FFFFFFCE
data1 = FFFFFFCE
data2 size = 1

4 个答案:

答案 0 :(得分:3)

可以使用char来存储整数值但非常小心:

对于初学者,可以存储在char中的值的范围是平台相关的,尽管C标准要求它是一个字节(即8位); 即。 sizeof(char)是1.有些平台将其定义为signed char,其范围为-128到+127。其他人将其定义为unsigned char,其范围为0到+255。 C标准允许实现选择最适合机器架构的那个。

要解决此问题,请务必明确使用signed charunsigned char

请注意,要将范围之外的任何数字强制转换为charsigned charunsigned char 未定义的行为

(并非严格相关但值得指出:在Java中,char是16位无符号类型。范围为0到+65535。)

答案 1 :(得分:1)

在C中,char是一个整数类型,它可以存储其范围内的整数值。在您的代码中,data1的值会转换为char,然后存储在data2中。

您甚至可以在算术中使用char变量:

char a = 'A';
int n = a + 100;
printf("%d\n", n);

答案 2 :(得分:0)

char数据类型与int中的C类似。它只有一个字节存储空间,因此它可以表示-128 to +127内的整数。现在,大多数时候你已经看到unsigned char用于增加整数范围,直到255。看看下面的代码:

#include <stdio.h>
int main()
{
    char data;

    data = 127; // here within the limit -128 to +127
    printf("%d\n",data);

    data = 140;  // something greater  than 127
    printf("%d",data); // here it overflows
}

输出

127
-116

但是如果你使用unsigned char

#include <stdio.h>
int main()
{
    unsigned char data;

    data = 127; // here within the limit 0 to 255
    printf("%d\n",data);

    data = 140;  // something greater  than 127
    printf("%d",data); // now it does not overflows
}

输出

127
140

如何在您的平台上获取char范围。这很简单:

#include <limits.h>
#include <stdio.h>
...

printf("range of signed character is %i ... %i", CHAR_MIN, CHAR_MAX );

注意:

character代表基本的存储块,即1 Byte1 Byte = 8 bits没有必要,但大多数实现都是如此。有关详细信息,请参阅http://en.wikipedia.org/wiki/Byte

答案 3 :(得分:0)

ce 04 00 00 -> data1 = 1230 it is data1's memory struct

data2 =汇编中的data1

001C13A5  mov         al,byte ptr [data1]  
001C13A8  mov         byte ptr [data2],al  

所以data2的值是ce,这就是我们所做的。 但为什么我们在屏幕上看到FFFFFFCE?我认为这是因为printf