|
发表于 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("[255]=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
|
评分
-
查看全部评分
|