符号数于int ,char 的关系?
插入代码:(问题在注释里面)#include<stdio.h>
int main(void){
signed int sINT=0XFF;
unsigned int unINT=0XFF;
signed char sCHAR=0XFF;
unsigned char unCHAR=0XFF;
printf("=0XFF=1111 1111 ;\n");
printf("signed with int :%d ,unsigned with int :%d ;\n",sINT,unINT);
printf("signed with char:%d ,unsigned with char:%d ;\n",sCHAR,unCHAR);
return 0;
}
/*在这里我有signed unsigned的int和char:
*问题:为什么signed char 打印的是-1,而signed int 则不是?
*/
时间:2013年7月23日18:06:30; 本帖最后由 ryxcaixia 于 2015-7-24 12:40 编辑
额 楼主 好巧啊 又遇到你了
直接上代码
这里的函数PrintComplate是个通用的模板函数, 可以打印变量在内存中的补码
无论是char 还是int, 即无论啥类型 都能自动识别
template<typename T>
void PrintComplement(T num)
{
for (int i = sizeof(T)*8 - 1; i >= 0; i--)
printf("%d", (num >> i) & 0x01);
}
int main(void)
{
signed int sINT=0XFF;
unsigned int unINT=0XFF;
signed char sCHAR=0XFF;
unsigned char unCHAR=0XFF;
printf("=0XFF=1111 1111 ;\n");
printf("signed with int :%d ,unsigned with int :%d ;\n",sINT,unINT);
printf("signed with char:%d ,unsigned with char:%d ;\n",sCHAR,unCHAR);
// ------------------------------------------------------------------- //
printf("sINT is :\n");
PrintComplement(sINT);
printf("\n");
printf("sCHAR is : \n");
PrintComplement(sCHAR);
printf("\n");
return 0;
}
首先可以看到 无论是int 还是char FF都被赋值给了最低的8位
但是对于char 8位中就包含了符号位 因为char 本来就8位
但对于int来说 值赋值给了32位中的低八位
楼主可以看到int的最高位是0 而非1
即符号位是正而非负
如果要想变为负数
可以考虑
sINT |= 0xF1234567;
反正只要把最高位变为1即可, 即F那位
如果单纯的想变为负数, 在不使用-号的情况下
直接 sInt = (~sINt) + 1
得-255
因为char占一个字节的大小,而int是4个字节,你只是赋了一个字长的大小,所以char 是-1,而int 是255,你可以查看内存。一下就明白了。 ryxcaixia 发表于 2015-7-24 10:33
额 楼主 好巧啊 又遇到你了
直接上代码
NB ryxcaixia 发表于 2015-7-24 10:33
额 楼主 好巧啊 又遇到你了
直接上代码
大神,谢谢啊,我要向你学习了。达到这种程度。看的书会很多吧{:7_113:} yjip267 发表于 2015-7-24 09:57
因为char占一个字节的大小,而int是4个字节,你只是赋了一个字长的大小,所以char 是-1,而int 是255,你可 ...
{:5_95:}恩恩,谢谢啊,
页:
[1]