c语言 补码原码换算

c代码:

#include

int main()

{

int a = 10;

printf("hello world \n");

printf("a = %d\n",a);

printf("b1 =  %d\n",0xff);

printf("b2 =  %d\n",0xffff);

printf("b3 =  %d\n",0xffffffff);

printf("b4 =  %d\n",0xfffffff8);

return 0;

}



输出结果:



hello world

a = 10

b1 =  255

b2  =  65535

b3 = -1

b4 = -8





解释:


%d  输出有符号32位整数 b1 = 1111 1111,b2 = 1111 1111 1111 1111满足 要求 ,正常输出。

b3 = 1111 1111 1111 1111 1111 1111 1111 1111  超出范围  首位1作为符号位保留,符号为负  ,其余 31位按位取反 为000 0000 0000 0000 0000 0000 0000 0000,加一得000 0000 0000 0000 0000 0000 0000 0001,输出结果 -1.



b4 = 1111 1111 1111 1111 1111 1111 1111 1000  超出范围  首位1作为符号位保留,符号为负  ,其余 31位按位取反 为000 0000 0000 0000 0000 0000 0000 0111,加一得000 0000 0000 0000 0000 0000 0000 1000,输出结果 -8.

你可能感兴趣的:(C语言,嵌入式内核开发)