c语⾔中0的补码,-0和+0在内存⾥怎样存储?或者说0的补码是
补码的最小负数什么?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我们都知道,数值在内存⾥都是以补码形式存储的。正数的原反补都⼀样,负数的补码等于原码的反码加1.但对于0来说,它有符号位吗? 以⼀个8位的系统来说,有符号数的⼆进制为(1000 0000),表⽰的是-0,还是-128呢? 看看负数补码的公式:负数的补码=1
0000 0000(模)- 数的绝对值 ⽐如:-1: 1111 1111 =1 0000 0000 - 0000 0001 -2: 1111 1110 =1 0000 0000 -0000 0010 假设1:表⽰-0。 那么 -0的补码: 1 0000 0000 - 0 =0000 0000 反码: 1111 1111 (0000 0000 -1 = 0000 0000 +1111 1111=1111 1111) 原码: 1000 0000(反码取反)
假设2:表⽰-128。 -128的补码: 1 0000 0000 - 1000 0000(+128没有符号位)= 1000 0000 反码: 1111 1111 (1000
0000 -1 =1 000 0000 + 1111 1111 = 1111 1111)(补码-1) 原码: 1000 0000(反码取反)
从上⾯看来,⼀个原码对应了2个补码。按照C语⾔的定义,在32位的系统⾥,int表⽰的范围为-2^31 ~ +(
2^31-1),那么可以推论出有符号数可以表⽰负的最⼤值,⽽没有-0的定义。也就是说上⾯1000 0000 表⽰的应该是-128,⽽不是-0。 对于⼀般的程序来说,+0和-0是没有区别的。但在⾼等数学⾥,+0和-0应该是有区别,表述不同的意义。如果在⼀些运算求解⾼等数学的程序⾥,没有-0会带来bug 吗?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论