下面程序中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
答案 0 :(得分:3)
你可以使用char
来存储整数值但非常小心:
对于初学者,可以存储在char
中的值的范围是平台相关的,尽管C标准要求它是一个字节(即8位); 即。 sizeof(char)
是1.有些平台将其定义为signed char
,其范围为-128到+127。其他人将其定义为unsigned char
,其范围为0到+255。 C标准允许实现选择最适合机器架构的那个。
要解决此问题,请务必明确使用signed char
和unsigned char
。
请注意,要将范围之外的任何数字强制转换为char
,signed char
或unsigned 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 Byte
,1 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