有符号和无符号 unsigned signed

本文介绍了C语言中无符号类型的使用方法,包括无符号整数的声明方式、格式化控制符的区别,以及它们与有符号类型之间的差异。此外,还提供了一些具体的示例来帮助理解。
无符号类型 - unsigned




 正数:直接写数字,无符号
 
 负数:前面加一个减号 ,有符号
            -3  -2 -1
 
 int long short分为有符号和无符号之分
        
区别:
有符号的可以保存负数
无符号的不能保存负数


C语言中,为了对整数数据更加精确区分,还分为有符号(signed)和无符号 (unsigned)两种。


 int long short都是有符号的


无符号类型变量申明方法:   
前面加 unsigned
unsigned 整数类型 变量名;
例:
unsigned int num = 10; 
unsigned short num = 10; 
unsigned long num = 10;


注意:
浮点数没有有符号或者无符号之分!

有符号和无符号对字符也可以修饰,不会报错。
字符本质上是整数


格式化控制符
 
有符号
int %d  (包含short )
long %ld
无符号
int %u   (包含short )
           long %lu


 无符号的正数范围能比有符号的更大


例子:


在C语言中,可以在头文件`limits.h`中找到所采用编译器中整数类型的取值范围,它们定义为宏,例如宏`INT_MIN`、`INT_MAX``UINT_MAX`等[^3]。以下是不同类型的有符号变量无符号变量的取值范围: ### 有符号变量取值范围 - **signed char**:最小值为`SCHAR_MIN`,最大值为`SCHAR_MAX`。 - **signed short**:最小值为`SHRT_MIN`,最大值为`SHRT_MAX`。 - **signed int**:最小值为`INT_MIN`,最大值为`INT_MAX`。 - **signed long**:最小值为`LONG_MIN`,最大值为`LONG_MAX`。 示例代码用于打印有符号变量取值范围: ```c #include <stdio.h> #include <limits.h> int main() { // signed types printf("signed char min = %d\n", SCHAR_MIN); printf("signed char max = %d\n", SCHAR_MAX); printf("signed short min = %d\n", SHRT_MIN); printf("signed short max = %d\n", SHRT_MAX); printf("signed int min = %d\n", INT_MIN); printf("signed int max = %d\n", INT_MAX); printf("signed long min = %ld\n", LONG_MIN); printf("signed long max = %ld\n", LONG_MAX); return 0; } ``` ### 无符号变量取值范围 - **unsigned char**:最大值为`UCHAR_MAX`。 - **unsigned short**:最大值为`USHRT_MAX`。 - **unsigned int**:最大值为`UINT_MAX`。 - **unsigned long**:最大值为`ULONG_MAX`。 示例代码用于打印无符号变量取值范围: ```c #include <stdio.h> #include <limits.h> int main() { // unsigned types printf("unsigned char max = %u\n", UCHAR_MAX); printf("unsigned short max = %u\n", USHRT_MAX); printf("unsigned int max = %u\n", UINT_MAX); printf("unsigned long max = %lu\n", ULONG_MAX); return 0; } ``` 一般来说,假设用`n`位来存储一个整数,有符号整数用最高位作为符号位,其取值范围是`(-2^(n - 1), 2^(n - 1) - 1)`;无符号整数没有符号位,取值范围是`(0, 2^n - 1)` [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值