|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码如下:
#include <stdio.h>
#include<stdlib.h>
int main(void)
{
int s=130;
unsigned char unChar=s;
char Char=s;
printf("%x\t%x\n",Char,unChar);//按16进制输出
printf("%d\t%d\n",Char,unChar);//按10进制输出
printf("%d\n",sizeof(Char));
char str[30];
char str1[30];
itoa(Char,str,2);//2即是代表转换为2进制
itoa(unChar,str1,2);//2即是代表转换为2进制
printf("char转换成二进制数是: %s\n\n",str);
printf("unchar转换成二进制数是: %s\n\n",str1);
return 0;
}
输出结果是 ffffff82 82
-126 130
1
char转换成二进制数是: 11111111111111111111111110000010
unchar转换成二进制数是: 10000010
查了下强制转换规则:(如从4字节的int类型转换成1个字节的char类型,则取int数据的最低的一个字节,将这个字节的数据赋给char型数据,且是有符号的,即首位为符号位;而如果是从int转换成unsigned char类型,则整个一个字节都是数据,没有符号位。)
按照这个逻辑来讲的话,Char这个变量放进去的应该是10000010,第一位当做符号位,把10000010以补码的形式存到内存里,怎么就变成了11111111111111111111111110000010,字节都变成4个字节的了,正常char不应该是1个字节嘛??
感觉和数在内存中以补码形式存在应该有关系,有没有大佬能解释下为什么嘛?
我这也一样。调了半天。查过表,得知符号可以到255。然而char居然有符号。有符号的话,越界重新循环。这就是一个负数了。可能,要表示一个负数,必须用这个值吧。而16进制数为无符号数。要表示-126这个数,(调试,Char的值为-126),用一个无符号的数表示-126,在32位机器上,必须用这么长的数来表示。仅用来表示而已。
|
|