二进制转换成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
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了