关于C语言中unsigned变量的问题?

作者&投稿:生秋 (若有异议请与网页底部的电邮联系)
关于C语言中unsigned的问题~

因为short类型是占2个字节
如果在32位系统下,用%d也就是整形的方式输出 两个字节的-1.那么其实输出的是
0x 00 00 FF FF
也就是65535了
如果在16位下,整形也是16位,那么输出的就是:0x FF FF所以就是-1了。

k = i+j;
将负数强制转换为无符号整型,过程中会产生溢出,比如-1强制转换为无符号在整型的时候会变成4294967295。所以这个语句本身就会产生错误,然后再以%d这种输出有符号整形的方式输出时又会产生溢出,4294967295又会以另外一种方式输出-1.

定义:

C语言中定义无符号整型变量如下:

unsigned int num;

定义有符号整型变量如下:

signed int num;

或者

省略signed:int num;

C语言如果不注明是否有符号默认是signed;整型常量默认也是有符号int。

举例说明

比如有定义:unsigned int num = 100;

100是整型常量,因为没有标识编译器默认为有符号int处理。这语句编译会进行隐式转换先把100有符号整数转换成无符号100,再赋值给无符号num变量;

如果有定义unsigned int num = 100u;

那这里是直接告诉编译器100要当作无符号整数进行处理,那就可以直接把100u赋值给num变量。

补充说明:

这里因为100的有符号无符号二进制是一样的,并看不出来有什么不同,如果在超过有符号可表示的范围就不一样了这可以自己实验一下。

所以在写代码时可以手动加上标识符u来告诉编译器如何处理这个整型常量。



变量可以用unsigned修饰,常量就不行了

所以要在整型常量后加u,表示无符号数



这只是一个规定而已,是为了区分signed int 100和unsigned int 100

这种情况还是要具体问题具体分析很多情况也是进行相关的情况用相关的调整还是要可以具体问题具体分析也是可以


C语言中有无符号类型的输出问题
因为short和int型占的字节数不一样,一般来说,int占四个字节,short占两个字节(不同的系统分配的字节数不一样)。他们是以二进制数存放在内存中的。你把-1赋给short型的a,输出的时候,只取了后面的两个字节的内容,那个负号在前两个字节中。你把-1赋给int型的a时,输出的时候,取了四个字...

C语言源代码中,行结尾有反斜杠,这些反斜杠有什么用?
define uint unsi\\ gned int 上面将uint 代替unsigned int 如果写成 define uint unsi gned int 就编译出错了。。。\\就是表示 紧紧接入下一行 表示不间断

C语言源代码中,行结尾有反斜杠,这些反斜杠有什么用?
反斜杠起到换行作用,用于宏定义和字符串换行。其中宏定义中使用居多。如果一行代码有很多元素,导致太长影响阅读,可以通过在结尾加\\的方式,实现换行,编译时会忽略\\及其后的换行符,当做一行处理。在宏定义中,要换行必须使用\\结尾。在字符串常量中,可以使用\\结尾,如 "this \\ is \\ for\\ testing"...

C语言类型转换运算问题
虽然你声明了unsigned char a,b,c,d,e;但实际上,在进行+-*\/四则运算时,他实际上是当成整型变量int来处理的 先看a=0 这个没什么问题 b=251,如果是int类型的话:0000 0000 1111 1011(一共32位,我只写这几位)但由于b是unsigened char类型,所以b各二进制位是1111 1011 好了,关键的地方...

C语言 问题
unsigned int a = 65535;int b = -2;printf("a = %d, b = %u\/n",a,b);getchar();} 输出:a = -1,b = 65534 分析如下:1.printf函数中a=%d,采用的是有符号输出,而a=65535为有符号的时候其值为-1,所以输出为-1;如果你想输出65535,应该这样写a = %u 2.printf函数中b=%u...

C语言函数的接口子程序
buffer为保存所读数据的保存空间int abswrite(int drive,int nsects,int sectno,void *buffer)本函数功能为写特定的磁盘扇区,drive为驱动器号(0=A,1=B等),nsects为要写的扇区数,sectno为开始的逻辑扇区号,buffer为保存所写数据的所在空间void getdfree(int drive,struct dfree *dfreep)...

兴宁市18230297390: c语言unsigned -
龚翟能全: 比较简单的区别就是,如果你使用的是char类型时,不需要unsigned;如果你是用的int 类型,并且一定不会用到负数,这时用unsigned做修饰可以防止出错.

兴宁市18230297390: c语言中signed 和unsigned是什么意思 -
龚翟能全: 1、signed是默认的,表示这个变量是有符号的,可以存储整数和负数. 2、unsigned则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负. 3、signed存储符号是有代价的,代价就是存储空间中的一个比特位专门用...

兴宁市18230297390: C语言中的unsigned int是什么 -
龚翟能全: unsigned integer意思是“无符整型”,表示从0开始到2^32-1的所有整数.unsigned 后的int可以省略的. 具体用法如下: unsigned a; a=5; 或:unsigned int a; a=5; 16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned int能存...

兴宁市18230297390: C语言中的定义整型变量时前面的unsigned是什么意思啊 -
龚翟能全: 无符号,比如:int a,那么取值范围可以为负;如果是unsigned int a,那么就是只可能为0以上的整数,包括0.

兴宁市18230297390: C语言的scanf函数中,关于unsigned型变量所需的数据,可以用%u,%d,或者%o,%x格式输入,这句话怎么理解 -
龚翟能全: unsigned无符号修饰符,输出时可以用 %u,%d,或者%o,%x 等格式, 其区别在于: %u,无符号方式,符号位按照数据位处理 %d,整数方式 %o,8进制方式 %x,16进制方式

兴宁市18230297390: "unsigned"在C语言中什么情况下使用?
龚翟能全: 就是无符号的意思,定义为unsigned后取值为正数不会出现<0的值!

兴宁市18230297390: 请问C语言中的unsigned类型只得是什么类型? 例:unsigned a; 仅仅是unsigned类型!不是unsigned int a;! -
龚翟能全: ungsiged 关键字是把变量声明为无符号类型的,它与变量的基本类型(如int ,long,double等)配合使用,当它所修饰的基本类型为int时,int可以省略,所以,像楼主所理解的ungsiged a; 和 unsigned int a; 是等价的,这个理解是没错儿的! 另外,如果你声明了一个 int a;则编译器默认它为有符号类型,即它等同于 signed int a;

兴宁市18230297390: C语言中,unsigned u表示无符号整形变量?这个无符号是什么意思? -
龚翟能全: 是的 就是等价于unsigned int u 计算机数据存储时第一位用0表示正数1表示负数 因为计算机底层实现只有高低电平表示0 1 而无符号的话 就是第一位不作符号表示 所以表示的数值范围就增大了

兴宁市18230297390: 在C语言中,unsigned char是什么类型 -
龚翟能全: unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型.整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号...

兴宁市18230297390: 计算机C语言中的关键字:unsigned是什么意思? -
龚翟能全: 无符号整形(范围在0~65536)

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网