发布网友 发布时间:2022-04-22 08:52
共5个回答
热心网友 时间:2023-09-19 10:18
有符号数就是用最高位表示符号(正或负),其余位表示数值大小,无符号数则所有位都用于表示数的大小
有符号数和无符号数是针对二进制来讲的。
有符号数用最高位作为符号位,“0”代表“+”,“1”代表“-”;其余数位用作数值位,代表数值。
比如:
0011 表示 +3;1011 表示 -3。
无符号数全部二进制均代表数值,没有符号位。即第一个"0"或"1"不表示正负。
比如:
0011 表示 3;1011 表示 11。
C支持所有整形数据类型的有符号数和无符号数运算。尽管C标准并没有指定某种有符号数的表示,但是几乎所有的机器都使用二进制补码。
通常,大多数数字默认都使有符号的,C也允许无符号数和有符号数之间的转换,当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C会隐含地将有符号参数强制转换为无符号数,并假设这两个数都是非负的,来执行这个运算。
扩展资料:
一个有符号的数据类型的最小值一般 是这样计算的:
有符号的数据类型的最大值的计算方法完全和无符号一样,只不过它少了一个最高位(见第3点)。但在负值
范围内,数值的计算方法不能直接使用1* 26 + 1* 25 的公式进行转换。
在计算机中,负数除为最高位为1以外,还采用补码形式进行表达。所以在计算其值前,需要对补码进行还原。 这里,先直观地看一眼补码的形式:
在10进制中:1 表示正1,而加上负号:-1 表示和1相对的负值。
那么,我们会很容易认为在2进制中(1个字节): 0000 0001 表示正1,则高位为1后:1000 0001应该表示-1。
计算机中带有符号数用补码表示的优点:
1、负数的补码与对应正数的补码之间的转换可以用同一种方法——求补运算完成,可以简化硬件;
2、可将减法变为加法,省去减法器;
3、无符号数及带符号数的加法运算可以用同一电路完成。
可得出一种心算求补的方法——从最低位开始至找到的第一个1均不变,符号位不变,这之间的各位“求反”(该方法仅用于做题)
参考资料:百度百科——无符号数 百度百科——有符号数
热心网友 时间:2023-09-19 10:19
无符号数(unsigned)是计算机编程中的一种数值资料型别。
有符号数(signed)可以表示任何类型规定范围内的数,而无符号数只能表示非负数(0及正数)。
有符号数能够表示负数的代价是能够表示的正数范围的缩小,因为其约一半的数值范围要用来表示负数(如8位有符号整数中,对应8位无符号整数表示128~255的部分被用于表示-127~-1)。无符号数可以利用其所占有的内存位来表示尽可能大的数。
例如,16位有符号整数可表示-32768~32767之间的任意整数,而16位无符号整数可表示0~65535之间的数。若将有符号数转换为二进制,则其数值类型允许的最左一位用于表示符号(1为负数,0为正数和0),但在无符号数中,最左一位与其右各位一样用于表示数值。
有符号数的编码方式,常用的是补码,另外还有原码和反码等。用不同二进制编码方式表示有符号数时,所得到的机器数可能不一样,但是真值是相同的。
热心网友 时间:2023-09-19 10:19
有符号数和无符号数是针对二进制来讲的。
有符号数用最高位作为符号位,“0”代表“+”,“1”代表“-”;其余数位用作数值位,代表数值。
比如:
0011 表示 +3;
1011 表示 -3。
无符号数全部二进制均代表数值,没有符号位。即第一个"0"或"1"不表示正负。
比如:
0011 表示 3;
1011 表示 11。
C支持所有整形数据类型的有符号数和无符号数运算。尽管C标准并没有指定某种有符号数的表示,但是几乎所有的机器都使用二进制补码。通常,大多数数字默认都使有符号的,C也允许无符号数和有符号数之间的转换,当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C会隐含地将有符号参数强制转换为无符号数,并假设这两个数都是非负的,来执行这个运算。
热心网友 时间:2023-09-19 10:20
有符号数就是用最高位表示符号(正或负),其余位表示数值大小,无符号数则所有位都用于表示数的大小
热心网友 时间:2023-09-19 10:21
通俗来讲,就是
假如,int一样吧,
signed int【有符号整型】=-21474838~21474838
unsigned int【无符号整型】=0~4294967295
有没有发现,21474838 X2=4294967295
很明显,事实上int的范围是固定的,就是4294967295的长度,
所以有符号的就是从负数到正数,长度是4294967295。
无符号的就是0到4294967295,长度也是4294967295。