C语言中输入超出char取值范围用十进制输出的结果

本文探讨了C语言中字符常量的定义和表示方式,包括十进制、八进制和十六进制。当字符常量超过ASCII码表的范围(0-127)时,其在内存中的表示及输出结果。例如,当定义`char c3 = 130;`并输出时,由于超出范围,会得到负值-126。这是因为计算机内部以补码形式存储数据,130的高八位被截取后形成负数的补码表示。输出时,不仅展示了ASCII码的对应字符,还讨论了数值形式的输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言中 字符常量我们通常这么定义:

char c1 = 'a';        //字符常量‘a’
char c2 = '\x61';     //'\x..' 十六进制字符常量     61H变为01100001B变为97D
char c3 = '\141';     //'\...'八进制字符常量        141O变为001100001最高位的0舍去变为                      
                      //01100001B=97D
char c4 = 97;         //十进制数转换成字符常量
char c5 = 0x61;       //十六进制数转换成字符常量  0x..     等价于上面的c2
char c6 = 0141;       //八进制数转换为字符常量    0...
printf("c1=%c,c2=%c,c3=%c.c4=%c,c5=%c,c6=%c\n", c1, c2, c3, c4, c5, c6); //输出结果都为a因为字符型常量以ASCII码,2进制形式存放 上面的都表示2进制的01100001 对应ASCII码表的a; 并且为字符形式输出
printf("c1=%d,c2=%d,c3=%d.c4=%d,c5=%d,c6=%d\n",c1,c2,c3, c4, c5, c6);//以数值形式输出 都为0110001B=97D 结果都为为97
   

所以在输出字符常量的值的时候我们可以用%c输出对应ASCII码表中的字符如:A ,B,C,a,b,c等等

我们也可以用十进制%d输出结果 对应输出的是ASCII码值

char的取值范围为-128~127

在这里如果我们用十进制数转换成字符常量 并且超出ASCII码表中

### C语言基本数据类型及其取值范围 #### 整型数据类型 整型数据类型包括`char`, `short`, `int`等,在不同的编译器和平台上可能会有所不同,但在常见的32位或64位系统上通常如下: - **char**: 字符型变量占用1字节(8位),其取值范围是从-128到127(对于带符号字符)或是从0到255(对于无符号字符)。这取决于具体实现环境[^1]。 - **short int (简称 short)**: 短整形一般占两个字节(16位),可以表示的数值区间大约为−32,768至32,767;如果是unsigned,则能表达更大的正数范围即0~65,535。 - **int**: 普通整数通常是四个字节长(32位),能够覆盖更宽泛的负数到正数区域约±2,147,483,647。当声明成unsigned时则可达到0~4,294,967,295之间的任何正值。 #### 浮点型数据类型 浮点数用于处理实数,并且遵循IEEE 754标准来定义它们内部如何被编码保存于内存之中[^3]: - **float**: 单精度浮点数占据四字节空间(32位),它提供了大约六七位十进制有效数字精度,指数部分允许的最大绝对值约为\( \pm 3.4\times10^{38} \)[^3]。 - **double**: 双精度浮点数则是八字节大小(64位),拥有更高的准确性——大概十五十六位有效的十进制小数,而指数范围也扩大到了接近 \( \pm 1.7\times10^{308}\) 的程度。 通过使用`<limits.h>`头文件中的宏常量可以获得特定平台上的确切边界值,比如`CHAR_MIN`, `INT_MAX`等等。另外也可以利用预处理器指令`sizeof()`函数配合乘法运算得出各类型的长度单位是bytes而不是bits[^2]。 ```cpp #include <stdio.h> #include <limits.h> int main() { printf("Size of char : %lu bytes\n", sizeof(char)); printf("Range of signed char: [%d to %d]\n", CHAR_MIN, CHAR_MAX); // 更多其他类型... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值