小蚂蚁学习C语言(29)——C语言补码(下)

解释以下问题:

vc++6.0中一个int类型的变量所能存储的数字的范围是多少

    int 类型变量所能储存的最大整数用十六进制表示是: 7FFFFFFF

    int 类型变量所能存储的绝对值最大的负整数用十六进制表示是:80000000

最小负数的二进制代码是多少

最大正数的二进制代码是多少

已知一个整数的二进制代码求出原始数字 

数字超过最大整数会怎样

不同类型数据的相互转化


举个例子就能明白上面的问题:


设置为一个char类型的变量,赋值一个int类型的值。

char i = 0    …… 128

printf("%d",i);

因为char只有一个字节,所以int类型高位会被截掉

对应的二进制数字 十进制数字
0000 0000 0
0000 0001 1
0000 0010 2
…… ……
0111 1111 127
1000 0000 -128
1000 0001 -127
1111 1111 -1

    通过这个表,可以看出来,当数字是127时,对应的二进制是 0111 1111,数字再加1,变成了128,二进制成了 1000 0000。由补码的知识可以知道,当最高位是1的时候,表示是一个负数,使用补码的运算法则,可以得到一个十进制数 -128。也就是说,当输入一个数字128,输出的却是 -128。继续加1,输出的值会从 -128,-127,-126……直到-1 ,二进制(1111 1111)2

    这是用char类型做了一个实验,int的字节数多,取值范围要大的多,但是原理都是一样的。


学PHP的小蚂蚁 博客 http://my.oschina.net/woshixiaomayi/blog



你可能感兴趣的:(C语言)