
有符号数和无符号数有什么区别?
设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为1.0。因为int型变量做除法后取整。
整数值通常在程序的源代码中指定为可选的前缀为+或 - 的数字序列。一些编程语言允许其他符号,例如十六进制或八进制。一些编程语言也允许数字组分隔符。
此数据的内部表示形式是值存储在计算机内存中的方式。与数学整数不同,计算机中的典型数据具有一些最小和最大可能值。
扩展资料:
在二进制计算系统中有四种众所周知的方式来表示有符号数。最常见的是二进制补码,它允许带有n位的有符号整数类型表示从-2到2-1的数字。
二进制补码算法很方便,因为表示和值之间存在完美的一对一对应关系(特别是没有单独的+0和-0),并且因为加法,减法和乘法不需要区分有符号和无符号类型。其他可能性包括偏移二进制,符号幅度和1'补码。
哪有什么“无符号数”、“带符号数”啊!
在计算机中,只有 0 和 1,既没有正负号,也没有小数点。
在计算机中,只有二进制的“零和正整数”(即自然数)。
在计算机中,根本就没有什么“无符号数”、“带符号数”!
当然,有人会狡辩说:自然数,就是无符号数。 但是“带符号数”确实是不存在的。
那么,计算机中的负数,是怎么出现的呢? 关键在于【算法】!
如果在加法计算时,舍弃了进位:正数,就能当做负数、加法,也就变成了减法。
且看下题:
用四位二进制数计算:5 + 15,和就是:1、0100。 进位 1,就是 16。
如果保留进位,和,就是:16 + 4 = 20。这就是“无符号数”的算法。
如果舍弃了进位,和,就只有 4,即为:5-1 = 4。这就是“带符号数”的算法。
舍弃了进位,也就是减去了 16。此时的 +15,当然就是“-1”了。
其实,1111,它就是 1111 ! 它本身并没有什么符号位!
它究竟是 +15,还是-1 ? 完全取决于你的算法!
它是“无符号数”还是“带符号数”? 根源并不在这个“数”! 而是在于算法!
算法,才是计算机的灵魂!
计算机老师应该在算法上面,讲清楚事实。
就不要在二进制数上面,歪七扭八的胡扯了。
----------
用 C 语言定义一个变量:unsigned char x,C 程序对 x 进行计算时,就会保留进位 (256)。
此时,x 的表达范围就是:0 ~ 255。 当 x = 1111 111 时,也就是 x = 255。
如果定义变量时,只写了:char x,C 程序对 x 进行计算时,就会忽略进位。
忽略进位,不就是偷偷的减去了 2^8 = 256 吗?
那么,x 的表达范围则是:-128 ~ +127。 当 x = 1111 111 时,也就是 x = -1。