Loading

有符号数和无符号数区别


返回 我的技术栈(Technology Stack)



有符号数和无符号数区别就是所能表示的范围不同

有符号数

有符号数是最高位为符号位,0代表正数,1代表负数。

#include <stdio.h>

int main()
{
	signed int a = -1089474374; //定义有符号整型变量a
	printf("%X\n", a); //结果为 BF0FF0BA

	//B       F      0       F       F      0        B	      A
	//1011    1111   0000    1111    1111   0000     1011     1010
        // 这里 -1089474374 是负数,所以,最高位为1 

	return 0;
}

无符号数

无符号数最高位不是符号位,而就是数的一部分,无符号数不可能是负数。

#include <stdio.h>

int main()
{
	unsigned int a = 3236958022; //定义无符号整型变量a
	printf("%X\n", a); //结果为 C0F00F46
   
    //C       0      F        0       0       F        4	      6
    //1100    0000   1111     0000    0000    1111     0100       0110
    // 这里 3236958022 是正数,即便最高位为1 

	return 0;
}

当我们写程序要处理一个不可能出现负值的时候,一般用无符号数,这样可以增大数的表达最大值。


有符号和无符号整型取值范围

默认是有符号型的
数据类型 long 一般在 32 位程序中为 4 字节,在 64 位程序中则为 8 字节 。

数据类型 占用空间 取值范围
short 2字节 -32768 到 32767 (-\(2^{15}\) ~ \(2^{15}\)-1)
int 4字节 -2147483648 到 2147483647 (-\(2^{31}\) ~ \(2^{31}\)-1)
long 4字节 -2147483648 到 2147483647 (-\(2^{31}\) ~ \(2^{31}\)-1)
unsigned short 2字节 0 到 65535 (0 ~ \(2^{16}\)-1)
unsigned int 4字节 0 到 4294967295 (0 ~ \(2^{32}\)-1)
unsigned long 4字节 0 到 4294967295 (0 ~ \(2^{32}\)-1)

参考:
[1]C基础讲义2018修订版(黑马程序员)


posted @ 2021-07-14 16:25  言非  阅读(1813)  评论(0编辑  收藏  举报