范围的大小是由类型所占有的字节来决定的。如此所示:char是一个字节8bit,那么在二进制中,8bit最大值是255,最小值是0(在是在无符号时)如果是有符号的话那么就还有一位是符号为,最高位是符号为。例如:1111
1111:如果是有符号的char数据那么这个数的-1;最高是符号位,如果是1,就是负数,如果是0是正数。
0111
1111
就是+127;
那么1111
1111
怎么理解是-1嗯!在数电中提到,对于一个负数要用它的反码来表示。
如:1111
1111
的反码是1000
0001怎么的来呢!?
首先,我们要得到-1的值,那么第一步是的好1000
0001,最高位1是符号位,最后一个1是数值位。但是在机器中我们要用反码来表示此值。那么就要求他的反码。反码的求法是符号位不变。数值位取反加一。
取反后是结果是:1111
1110
再加一的结果是:1111
1111
如果是1,那么1
的8位表示是0000
0001
解释的很少!你可以自己看看,如果不懂可以在聊!要看你是在数学意义上研究还是在计算机意义上研究了
在数学上你就写负号好了
在计算机上,你得使用补码,而且还要指定字长。
比如说一个二字节整型的 -2 就应该是:
11111111 11111110
十六进制:FFFE
八进制:177776负数用十六进制表示,通常用的是补码的方式表示
十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
正数的补是它本身;负数的补码是它本身的值每位求反,最后再加一。
例如:求-3的十六进制
3的十六进制为0003,3求反之后是C,再加1,成D,所以-3的十六进制就是:FFFD1 C语言里,负整数的二进制形式最高位为 1,正整数的二进制形式最高位为 0。这是一种补码的表示形式,参考这里:>针对第一个问题:对。任何数在内存中都是以补码的形式存在(其中正整数:原码=反码=补码;负整数:原反码=原码(最高位不变,其余按位取反);补码=反码+1)。
针对第二个问题:
如果不满八位,系统肯定是补足八位。
对于正整数而言,最高位全部填满0
对于负整数而言,按照“原反码=原码(最高位不变,其余按位取反);补码=反码+1”原则发生变化:
比如-5的存储:
因为-5表示是:1000
0101(原码)=>1111
1010(反码)=>
1111
1011(补码,存储的就是这个)用补码表示
ax
=
-15
15的二进制形式:1111
ax有16位,
0000000000001111
取反
1111111111110000
再+1,得到
补码
1111111111110001
所以ah
=
11111111
=
-1
al
=
11110001
=
-15
cbw把高字节寄存器所有位都设置成符号位。
neg就是上面的补码运算。概念不清,看看ASCII码表,没有负数的字符,你要显示负数,只能输出负号,再输出数学字符,来表示一个负数;一个负数是以16进制数存储的其中最高符号位为1表示该数是一个负数,为了输出表示是一个负数,实际输出的是一个由负号跟1~9数字字符组成的字符串。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)