重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C语言中有符号型signed和无符号型unsigned的区别为:符号位不同、正数范围不同、转换不同。
创新互联专业提供多线服务器托管服务,为用户提供五星数据中心、电信、双线接入解决方案,用户可自行在线购买多线服务器托管服务,并享受7*24小时金牌售后服务。
一、符号位不同
1、有符号型signed:有符号型signed由于有符号位,故能表示负数。
2、无符号型unsigned:无符号型unsigned由于省去了符号位,故不能表示负数。
二、正数范围不同
1、有符号型signed:表示同一数字类型,有符号型signed由于有符号位,正数范围比无符号型unsigned小。
2、无符号型unsigned:表示同一数字类型,无符号型unsigned由于省去了符号位,正数范围比无符号型unsigned大。
三、转换不同
1、有符号型signed:正数有符号型signed能转换为无符号型unsigned,负数有符号型signed不能转换为无符号型unsigned。
2、无符号型unsigned:无符号型unsigned能转换为有符号型unsigned。
这里只是做一个标识符来使用而已
同楼上的,实现+-替换用附值语句:
while(……)
{
sign*=-1; // sign=-1*sign
……
}
//sign不是c语言的库函数,
sign(z,p); //表示对一个名为sign的函数调用,传递参数是变量z,p。
你既然知道用4294967295来试验,那么基础的什么数值范围的,我就不说了。
之所以输出结果都是-1 \n 4294967295,是因为两个变量实际保存的内容是一样的,这个没有区别。而输出格式%d决定了实际显示。
但在参与运算的时候,就完全不同了。
signed表示有符号数. 用来修饰整型类型.
包括char short int long以及部分编译器支持的long long.
不过, 这些类型缺省就是有符号的, 所以一般signed会被省略.
即char和signed char等效.
因此, signed被称为最没用的关键字, 和auto类似.
1、unsigned的作用就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32。看起来unsigned 是个不错的类型,尤其是用在自增或者没有负数的情况。但是在实际使用中会出现一些意外的情况。
2、signed在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据。
扩展资料:
unsigned和signed的区别
1、所有比int型小的数据类型(包括char,signed char,unsigned char,short,signed short,unsigned short)转换为int型。如果转换后的数据会超出int型所能表示的范围的话,则转换为unsigned int型
2、bool型转化为int型时,false转化为0,true转换为1;反过来所有的整数类型转化为bool时,0转化为false,其它非零值都转为true
3、如果表达式中混有unsigned short和int型时,如果int型数据可以表示所有的unsigned short型的话,则将unsigned short类型的数据转换为int型,否则,unsigned short类型及int型都转换为unsigned int类型
举个例子,在32位机上int是32位,范围–2,147,483,648 to 2,147,483,647,unsigned short是16位,范围0 to 65,535,这样int型的足够表示unsigned short类型的数据,因此在混有这两者的运算中,unsigned short类型数据被转换为int型
4、unsigned int 与long类型的转换规律同3,在32位机上,unsigned int是32位,范围0 to 4,294,967,295,long是32位,范围–2,147,483,648 to 2,147,483,647,可见long类型不够表示所有的unsigned int型,因此在混有unsigned int及long的表达式中,两者都被转换为unsigned long
5、如果表达式中既有int 又有unsigned int,则所有的int数据都被转化为unsigned int类型