c语言当整型数据大于127时赋给字符型的实际问题

作者&投稿:惠孟 (若有异议请与网页底部的电邮联系)
C语言问题,超过127的整数的%c输出形式~

程序正确,输入格式有误,因为scanf("%d,%d",&m,&n);
的格式控制符中用‘,’分隔,所以输入数据时就要用‘,’分隔
像这样输入
3,10

这个你理解错了,-127并不是全1,而全1却是-1。看下面的规律,从上到下都是+1 关系:
0000 0001 1
0000 0010 2
。。。。
0111 1110 126
0111 1111 127 (有符号数最大值)
1000 0000 -128 (比127还大1的值)
1000 0001 -127 (比127还大2的值)
。。。。
1111 1110 -2 (比127还大127的值)
1111 1111 -1 (比127还大128的值)
0000 0000 0 (比127大129)
0000 0001 1 (怎么样,这个数字是完全循环的)

怎么样,看我说0比127大129是胡说八道是吧,看我来计算一下:127+129 = 256,char能表示的总个数是256,256 % 256 == 0。其实补码的方式恰好是最适合计算机里保存和计算的方式,理由如下:
数学上,-127(1000 0001)是大于 -128(1000 0000)的,而这两个二进制的值不管用在有符号还是无符号、4位还是8位还是16位(前补零),看上去都是-127>-128。
加法运算的时候,完全不需要考虑符号,例如,-1 + 2 = (1111 1111) + (0000 0010),从右数第二位开始进位,结果是 (1 0000 0001) 而char的位数是8位,于是最左位直接舍去不管了,结果就是 0000 0001 ,-1 + 2 = 1,结果正确。至于 127 + 1 = -128这种事情,就是计算机整形运算的溢出了,很容易理解,而且有时候也很好用。



以上用法叫做补码,而你所说的-127用全1表示的方式也有,叫做反码,负数和其绝对值只有第一位符号位的区别。
0111 1110 126
0111 1111 127
1111 1111 -127
1111 1110 -126

这样看来,虽然对人来说阅读和理解都简单,但是有下面的几个问题:
-126减去-127应该等于1,而这两个数字的码值看上去是 1111 1111 > 1111 1110 的,升位操作(前补零)也是一样的结果;
0000 0000 和 1000 0000 分别表示 +0 和 -0,而这两个值应该是一样的。
负数和正数进行加法运算的时候,需要把负数去符号变成绝对值,然后再变成减法再进行计算,复杂度要大多了。

---------------------------
我不是为了挖坟才来挖坟的,因为我今天看mysql的tiny int的分析的时候,有个人发文说-127 就是全1,而且还不让评论,这太坑爹了啊,而且搜了一下,对补码一知半解的人不在少数,所以借楼主的位置来此说下

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

你把300-256=44,那就是逗号,把400-256=144那就是问号


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

c语言int型数据超过范围能不能用% c输出
int型数据超过[0,127]这个范围就不能用%c输出。当一个int型数据在[0,127]这个范围内,它不一定能用%c输出。ASCII 表上的数字 0–31 分配给了控制字符,用于控制像打印机等一些外围设备,是不可打印的 意思就是不可输出。

C语言中把整型大于255的整数用字符型输出时
ASCII 值是从000--255。当c1=300时,超过了这个范围。这时编译器会输出ASCII值为(300-255-1)所对应的字符。

C语言什么时候整型数据溢出会变成0?
整形就是int型,上溢就是从最大正数变成最大负数 但是如果是unsigned的时候,最大值上溢就变成0了。

C语言数据溢出时的值是负值吗
数据溢出分为上溢出和下溢出两种情况。另外数据存储在变量里时与变量的数据类型密切相关。所以溢出现象要分类讨论。例如,unsigned int型或unsigned short型或unsigned char型变量在上溢出时,将舍去超范围数据,其值仍然为正。附上测试程序:include <stdio.h> void main(void){ unsigned char j=255;j...

c语言中l是什么意思
另一种使用l的方式是在c语言中的数字字面量中。这个l表示一个长整数,它通常被用于区别普通的整数。例如,当程序需要储存一个大于常规整型数据类型所储存范围的数值时,我们可以在数字的末尾加上l来表示它为长整数。此外,在c语言中,l还可以作为字符串字面量的一部分。它表示字符串的长度,通常与...

C语言中%4d,%5d之类的是什么意思?
d(或i)格式符。用来输出十进制整数,有以下几种用法:①%d,按整型数据的实际长度输出。②%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。③%ld(%mld 也可),输出长整型数据。

c语言 %d %f %lf %d可表示的最大和最小范围是多少?超过了范围 计算机...
%lf是双精度浮点型的别名,其表示范围与%f相同。当数值超出表示范围时,计算机通常会将数值截断或舍入,具体取决于数值类型和编译器实现。截断即直接使用最接近的可表示数值,而舍入则通常遵循一定的规则,例如四舍五入。在浮点运算中,还可能存在另一种情况,即“溢出”。溢出发生在运算结果的绝对值...

在C 语言中,整形变量与字符型变量是否在任何情况下都是可以相互替代的...
整形变量和字符型变量是可以互相替代的 可以说字符型数据和整形数据都是根据二进制储存在内存中的,你可以去书后面看ASCII码,里面有他们相应的对应值

请问一下在C语言中 1d和ld有什么区别 一d和Ld
在C中,1d什么都不是,ld是合法用户标识符!1d——在scanf中,按十进制接收一位整数;在printf中,按十进制输出对应变量值,占宽1位右对齐,当实际数位多于1时按实际数位宽度输出。ld——在scanf中,按长整型接收十进制整型数据,即一个数占4字节;在printf中是输出长整型数据(4字节)。在32位系统...

涵江区17884077080: c语言中,a是实型,直接把整型的c=147赋值给a.为什么输出后a变成? -
谏昨人胎: 你是将ASC2表中,ASC码为147的符号赋给A,但是00~127才是标准的,128~255是IBM-PC专有的,后面的不一定编译器能识别,你换个前面点的字符就行了PS:选我为最佳吧,回答得这么好~,做任务了

涵江区17884077080: C语言超过256的整型如何转化为字符型? -
谏昨人胎: 不太懂你的意思 其实每个字节的数据绝对不会超过255,如果超过了就应该转换为两个或以上的字符.

涵江区17884077080: C语言编程中 为什么只能输出两个字符 -
谏昨人胎: ascii码中可打印字符最大值为127,a-z对应97-122,A-Z对应65-90,你加的数别让他超过127就可以打印出来了

涵江区17884077080: C语言,字符型变量 -
谏昨人胎: 是说如果将一个整形数当做字符型类处理的话,那个整形数会被截断,也就是将那个整形数的二进制的低8位保留下来,其他的位丢掉,这种做法会导致数据的精度降低.char 至少8位 wchar_t 16位字符 short 至少16位 int 至少和short一样大 long 至少有32位,且保证位数不小于int long long 至少有64位 int i = 123456; char c = i; //将i赋值给c if( int(c) == i)printf("数据未被截断!\n"); else printf("数据已被截断, c = %d, i = %d", int(c), int(i));

涵江区17884077080: c语言 怎么讲一个整形变量的值赋给一个字符型数组中的一个元素 -
谏昨人胎: 1 b[0][0]=a+'0'; 这样就可以了,不过这样只使用于1位数的情况,因为ASCII码表里只有0-9的ASCII码,它们比正常的多'0'的值,也就是48.

涵江区17884077080: c语言程序设计中将一个大于32767的长整数赋给整形变量,会得到什么结果? -
谏昨人胎: 高位丢失,可能变负数. 例如: long int i = 32799; //没问题 short int k = 32799; // 有问题 printf("%d, %d",i,k);得: 32799, -32737

涵江区17884077080: C语言中字符占一个字节,整数占两个字节,为什么有时候整数可以赋给字符呢?
谏昨人胎: 字符在c语言中对应是ascii码,是整数表示; 字符本质上是整数的一个子集. 所以,c语言规定,字符数据和整数数据可以相互赋值. 字符值是以ASCII码的形式存放在变量的内存单元之中的.如x的 十进制ASCII码是120,y的十进制ASCII码是121...

涵江区17884077080: C语言如何实现整形转换成字符型然后赋值到字符数组 -
谏昨人胎: a=12345678 为int型,在内存中占4字节,共32位,即为 00000000 10111100 01100001 01001110 将a右移24位即取出前8位,第一个字节; 将a右移16位,然后位与00000000 11111111 即0xff,即可取出第二个字节; 将a右移8位,然后位与...

涵江区17884077080: c语言中,double (*f)()是什么意思 -
谏昨人胎: double在这里是指将变量i和变量s定义为双精度实型变量.(也就是说:赋给这两个变量的值将以双精度实型格式存储在内存中) 注意事项 1、类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则...

涵江区17884077080: c语言,怎样讲整形的数字赋值给一个字符串数组? -
谏昨人胎: #include<stdio.h> #include<string.h> void main() {char chessBoard[200]=" 0 1 2 3 4 5 6 7";char squares[100][100]={0}; char a[2]={0}; int row,column;for(row=0;row<8;row++) {strcat(chessBoard,"\n");//strcat(chessBoard,"?");a[0]='0'+...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网