在C语言中,正负数的表示主要依赖于整数类型变量的有符号和无符号属性。
1. 有符号整数类型
有符号整数类型包括int
, long
, short
, char
等,这些类型的变量可以存储正数、负数以及零。
1.1 正数
在有符号整数类型中,正数的表示方式与我们在数学中使用的十进制表示方式相同,如果我们有一个int
类型的变量a
,我们可以将值5赋值给它:
int a = 5;
1.2 负数
负数在计算机中的表示方式是使用二进制补码,补码是一种可以让加法和减法操作统一的二进制表示方法,对于一个n位的二进制数,其补码是由原码(即我们通常理解的二进制表示)取反(0变为1,1变为0)后加1得到的。
5在8位二进制中的表示为:
原码:00000101(这是+5的原码表示)
反码:11111010(取反)
补码:11111011(加1)
5在计算机中以补码形式存储。
2. 无符号整数类型
无符号整数类型包括unsigned int
, unsigned long
, unsigned short
等,这些类型的变量只能存储非负数(即正数和零)。
2.1 正数
无符号整数类型的正数表示方式与有符号整数类型的正数表示方式相同,只是它们不能表示负数,如果我们有一个unsigned int
类型的变量b
,我们可以将值5赋值给它:
unsigned int b = 5;
2.2 负数
由于无符号整数类型不能存储负数,所以在试图给一个无符号整数类型的变量赋一个负值时,会发生所谓的“下溢”现象,即该值会被转换为一个非常大的正数,这个转换过程也是基于二进制补码的,但是结果被解释为一个正数。
如果我们尝试将5赋值给一个unsigned int
类型的变量c
:
unsigned int c = 5;
实际上,c
的值将会是一个非常大的正数,具体取决于系统的位数,在32位系统中,c
的值将会是4294967291(即2^32 5)。
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/392265.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复