刚学C语言 请问ASCII码值为128-255字符型数据转为整型变量时得到的是-128--1的值 怎样算的 谢谢

如题所述

因为一个char的大小是一个byte即8个bit,一共可以表示2的8次方即256个数字0-255
但是char分为signed和unsigned两种形式,即是否有正负之分

如果是signed就是有正负号的,在机器码中8位二进制bit就需要占用一个作为区别正负号的标记,分别用1或0表示,那么剩下的7个bit能够表示0-127的数字,由于2的8次方一共是256个数字,可以得到负数范围内有128个数字,即一个signed char能表示从-128-127的数字
与之相对的,unsigned char即表示从0-255的值,由于ASCII码没有负值,而且一般的ASCII码只需要使用0-127就足够了,所以剩下的那128个字符就组成了extended ASCII,当然,一般是没有什么作用的,也可以看到这个范围的符号一般都是些稀奇古怪的,但是你将它赋值到这个范围就引起了这个问题

虽然定义一个char变量生成的究竟是unsigned char还是signed char和你具体使用的环境有关,但一般的INTEL计算机都是生成signed char,如果你不能确定可以使用limits.h中提供的常量来确定,当然int long 等等也能够用相同方式查看,如果是float的话用float.h查看,具体的可以查询library的说明,程序如下,自己运行看看吧

#include <stdio.h>
#include <limits.h>

main(){
int a=CHAR_MIN;
int b=CHAR_MAX;
printf("%d %d\n",a,b); //Print the minimum value and maximum value of data type char
}

现在我们已经明白了,用8位bit表示的signed char是无法表示超过127的数字的,所以呢,当你赋予变量一个超过127的值的时候,它就会自动变回负值的最小值并向上递加,可以想象成一个圆环,原理在于CPU中只存在加法器,所以如果不能循环,你就没法做减法了,具体的你可以随便买一本微机原理看看,我推荐CSAPP,如果你想要具体研究C语言的话,可以看看C语言圣经K&R,多用用LINUX
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-20

0的ASCii值为16,ASCII值转换为整形数据很简单,只要字符代表的ASCII值减去0代表的ASCII值也就是减去16就是转换后的整形数据,希望能解答你的疑惑

刚学C语言 请问ASCII码值为128-255字符型数据转为整型变量时得到的是...
与之相对的,unsigned char即表示从0-255的值,由于ASCII码没有负值,而且一般的ASCII码只需要使用0-127就足够了,所以剩下的那128个字符就组成了extended ASCII,当然,一般是没有什么作用的,也可以看到这个范围的符号一般都是些稀奇古怪的,但是你将它赋值到这个范围就引起了这个问题 虽然定义一个char...

C语言编程中,若赋予 signed char c的值为255,则输出的值为-1。这是...
char是一个字节8位,8位有符号数表示的范围是-128~127,负数是在计算机中是用补码表示的,255换成二进制是8个1,最前面一位是1,表示是负数,具体的数值呢,由正数到负数是取反加1,反过来是减一取反,所以8个1减一后是11111110,取反后是1,所以是-1,如果是256的话,直接就溢出了,1后面8...

...字符型的取值范围是0-255,表示的是只有255字符(难道计算机只有255个...
其实是这样算的,CHAR字符型数值表示以一个字节为基准(一个字节8位)那按照二进制推算(2的8次方是256),因为是无符号字符型所以是0-255 当255再加1时,就会溢出,此时得到的结果为0。 而如果是有符号,则第7位(即最高位做为符号位 1为负,0为正)所以此时得到的数值就该在-127-127之间。

C语言char型变量取值范围是-128-+127?
char型变量取值范围是-128---+127,是针对当把该变量看成整型数时而言的。负值对于字母没有意义。char型变量取值范围是-128---+127这一说法本身存在问题,char看成无符号数的话,取值范围就是0--255了(对应扩展的ASC码)。

用C语言编程 通过键盘输入一个小写字母,要求将其转化为对应的大写字母后...
} ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中:0~31及127(共33个)是控制字符或通信专用字符...

在C语言中,ASCII码值大于128的输出后全部是乱码,为什么啊??_百度知...
ASCII码值128以后的称为扩展ASCII码。在小型电脑开发的初期,就已经严格地建立了8位元位元组。因此,如果使用一个位元组来保存字元,则需要附加的字元来补充ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。

keil中 c语言中的强制转换符问题
如果无符号数大于等于32768,则最高位为1,赋给整型变量后就得到一个负整数值。反之,当一个负整数赋给unsigned 型变量时,得到的无符号值是一个大于32768的值。● C语言这种赋值时的类型转换形式可能会使人感到不精密和不严格,因为不管表达式的值怎样,系统都自动将其转为赋值运算符左部变量的类型。...

请问A,a,0的ASCII 码值
值得注意的是,ASCII码的最高位通常用于奇偶校验,确保数据传输的准确性。此外,扩展ASCII码(128-255)允许在第8位添加更多特殊字符,如外来语字母和图形符号。总的来说,ASCII码是计算机中字符编码的基础,对于理解和处理文本数据至关重要。更多不常见字符的ASCII码可以在相关资料中查找,如百度百科。

c语言当整型数据大于127时赋给字符型的实际问题
字符型变量占用一个字节,表示整数的范围是-128~127,你用超过这个范围的数比如300赋值时,计算机会在寄存器中取得300这个数12cH,然后将低位字节2c赋值给字符型变量,高位被舍弃,就如同你赋值:c1=32;的效果一样

...字符型的取值范围是0-255,表示的是只有255字符(难道计算机只有255个...
如果只用一个char变量只能表示256个字符,但实际上你还可以用两个或两个以上的char变量表示更多的字符 像是汉字,一般一个汉字要占用用两个字节以上的空间,所以表示它的时候要用两个或者两个以上char类型变量来表示它,比如:char a[]="你好";,这个字符数组长度应该为5(这里的汉字用两个字节表示)...

相似回答