二进制转换成int和unsigned int的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/21 15:47:47
unsigned short A = 10;
printf("~A = %u\n", ~A);
//为什么得到4294967285

char c=128;
printf("c=%d\n",c);
//为什么得到-128

问题1;

unsigned short 为2个字节: 在内存中的存储为:00000000 00001010

而以%u的输出就是以32位的整型输出:

所以为:00000000 00000000 00000000 00001010

取反得:

11111111 11111111 11111111 11110101= 4294967285

看来这个是先格式化,再取反.

问题2:

char c=128;

128为整型:在内存中的存储为:

00000000 00000000 00000000 10000000

把它赋值给char类型<这里默认的就是有符号的char>只能接受8位

所以就为10000000

这里因为首位为1 所以明显的为负数

把符号位提出来 求补码为0000000的原码

就是补码取反+1=1111111+1=10000000=128

带上上面的那个负号就为:-128了