lark 发表于 2015-7-23 18:06:28

符号数于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-23 18:06:29

本帖最后由 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

yjip267 发表于 2015-7-24 09:57:48

因为char占一个字节的大小,而int是4个字节,你只是赋了一个字长的大小,所以char 是-1,而int 是255,你可以查看内存。一下就明白了。

zhangzhilin 发表于 2015-7-25 16:52:03

ryxcaixia 发表于 2015-7-24 10:33
额 楼主 好巧啊 又遇到你了
直接上代码



NB

lark 发表于 2015-7-25 17:25:41

ryxcaixia 发表于 2015-7-24 10:33
额 楼主 好巧啊 又遇到你了
直接上代码



大神,谢谢啊,我要向你学习了。达到这种程度。看的书会很多吧{:7_113:}

lark 发表于 2015-7-25 17:29:28

yjip267 发表于 2015-7-24 09:57
因为char占一个字节的大小,而int是4个字节,你只是赋了一个字长的大小,所以char 是-1,而int 是255,你可 ...

{:5_95:}恩恩,谢谢啊,
页: [1]
查看完整版本: 符号数于int ,char 的关系?