求助一个c语言问题

作者&投稿:甫届 (若有异议请与网页底部的电邮联系)
求助一个c语言问题?~

二进制11111111代表-127,是按原码规则来算。若按补码规则,二进制11111111算出来是-1。
文中说的是10000000代表-128。
详细描述如下:

[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
计算机将第1位作为符号位,0表示正数,1表示负数。
原码:原码很好理解,第1位是符号位,其余位表示数值。
反码:
(1)正数:正数反码是其本身。
(2)负数:去掉原码符号位,其余位按位取反。
补码:
(1)正数:正数补码是其本身。
(2)负数:在反码基础上加1。
由上述定义可知:
[+0] = [00000000]原 = [00000000]反 = [00000000]补
[-0] = [10000000]原 = [11111111]反 = [00000000]补
既然+0和-0的补码一致,所以只需保留一个(+0和-0原码不同,注意看符号位)。
这样一来,“[-0] = [10000000]原”相当于没有使用,于是规定:“[10000000]”为-128。
既然是“规定”,就不能按原码、反码、补码的规则计算了。设计计算机时就在硬件中设置为:10000000代表-128。
之所以引入补码,是为了消除减法,用加负数来替代减法运算,这样让CPU设计更简单。

void fun(int x) { if(x/2>0) //if (3/2>0) 成立,执行fun(3/2)fun(1),==>if(1/2>0)不成立,执行printf,输出1,然后回到函数回调出,及输出开始的3,所以输出结果为:13,另:不管if成立与否,printf都执行. fun(x/2); printf(“%d”,x); } main() { fun(3); printf(“\n”); }

楼上在说啥呢,char i = 2 就是把数字 2 放到 i 里了,如果你真要以字符的形式打印 i,得到的就是 ascii 码表上你说的某个字符,并不是 '2'。
这样的写法其实也是把 i 当作一个 int 来用,只是范围小了很多(-128~127),不太常见,但会出现在一些对内存资源比较敏感的场景,因为 char 的内存占用比 int 小。
如果是电脑程序就不用太考虑这个写法了,该整型整型,写单片机倒是挺常见的。

不是这样的,你刚好说错了。char c=2;
这是把一个int 值 2,强制转换成char 值'\2',然后赋值给变量c。

char i = 2;
char ii = '2';
这是两个不同的字符。i代表一个输出时不可见的字符,它的ascii值是2;ii代表数字2的字符,它的ascii值是50。
又如char c0 = '2', c1 = '3';
则 c1 - c0 = '3' - '2' = 51 - 50 = 1,
c0 + 1 = '2' + 1 = 50 + 1 = 51 = '3' = c1
这里写了一堆,但显然知道两个char值之间的间隔就可以得到运算结果了(比如在ascii表中'3'紧跟在'2'的后面),并不需要实际的ascii值。
总结一下,char变量里存储的是一个整数值,采用与整数相同的运算规则。char相当于整数的一个真子集。至于它如何在printf时变成我们看得见的字符,那是操作系统的事情


c语言 大括号问题
在C中,使用大括号的方法无所谓对还是错——只要每个开括号后都有一个闭括号,程序中就不再会出现与大括号有关的问题。然而,有三种著名的大括号格式经常被使用:Kernighan和Ritchie,Allman,Whitesmiths。下文中将讨论这三种格式。在《C程序设计语言(The C Programming Language)》一书中,Brian Kernighan...

关于C语言,求助解决! 诚请援助,谢谢!
7254 \/ 186 = 39 7852 \/ 1963 = 4 5346 \/ 198 = 27 5346 \/ 297 = 18 5796 \/ 483 = 12 include <stdio.h> int check(int num, int *flag){ int sign[10];int i;int temp;if( num > 9999 || num < 1000) \/* 结果应为4位数 *\/ return 0;for(i = 1; i < 10; ++i...

C语言1维数组的问题,高手来指点下
产生费波那契数:定义是 一个排列,排列里每一个数是前两个数的和.如1 1 2 3 5 8 13 ...你的个程序有两个问题 第一个是:#include<stido.h> 应该是stdio.h 第二个是:for(i=0;i<=20;i++) 数组只有20个,而你循环了21次,数组越界,这个是读的,如果是写的,就会有很多问题.应该改成...

C语言作业,拜托了,越简单越好。
没有做输入上的防呆 include <stdio.h> include <stdlib.h> int main(){ float x=0, money=0;char y;int z=0;printf("请输入加油量(千克):");scanf("%f",&x);printf("\\n请输入汽油品种(a,b,c):");scanf(" %c",&y);printf("\\n请输入服务类型(自己加请按1,协助加请按2):...

c语言题怎么做?急!!!
参考提示:把每个教师当成一个结构变量,用结构体来编写,则每个教师的各项指标为结构变量的组成,结构变量的组成被定义在结构体中 【主函数之外】:struct Person结构变量Person { char name[20];教师的姓名 Position pos; 教师的职称分级 {}内定义的数据是结构变量Person的组成 int salary; 教...

c语言,请问这题做的过程该是什么样?
进行下一个循环下标值变为2,ch[2]的值为a,不符合循环条件,循环退出 所以最后s的值就是1 说一个技巧有助你日后遇到这种类似题目时方便理解 很简单,只需要在循环内部添加一个printf语句,把变量输出就能很直观很简单地理解题目的过程了 比如这题可以在循环内加一个printf("ch[i]=%c s=%d\\n",...

C语言题目输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的...
错误代码:if('a'<=nextchar<='z'||'A'<=nextchar<='Z')else if('0'<=nextchar<='9')修改后:include <stdio.h> int main(){ int letter=0,space=0,number=0,others=0;char nextchar;printf("Input your string\\n");for(;nextchar!='\\n';){ scanf("%c",&nextchar);if('a'...

如何学习C语言
很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言? 我是一个教师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是C语言。经过这些年的开发,我深深的体会到C语言对于一个程序设计人员多么的重要,如果不懂C语言,你想写底层程序这几乎听起来很可笑,不懂C语言,你...

谁有好的C语言例题?
1、以下程序实现:输入圆的半径 r 和运算标志 m ,按照运算标志进行指定计算。标志 运算 A面积 B周长 C二者均计算 2、以下程序实现输出 x , y , z 三个数中的最大者。3、以下程序实现:输入三个整数,按从大到小的顺序进行输出。4、以下程序对输入的一个小写字母,将字母循环后移 5 个位...

c语言如何输入一个正整数N,再输入N个整数,按从小到大的顺序输出?_百度...
#include\\x0d\\x0avoid main()\\x0d\\x0a{\\x0d\\x0aint n,i,j,t,a[10000];\\x0d\\x0aprintf("请输入正整数N:");\\x0d\\x0ascanf("%d",&n);\\x0d\\x0aprintf("请依次输入%d个数",n);\\x0d\\x0afor(i=0;ia[i+1])\\x0d\\x0a{\\x0d\\x0at=a[i];\\x0d\\x0...

平乐县15953928458: c语言问题求助 求思路输入一个不多于5位数的正整数,要求:①求出它是几位数?②分别打印出每一位上的数字;③按逆序打印出该数字;④能够处理负数... -
敖栋千新:[答案] #include "stdio.h" void main() { char str[100]; int i; gets(str); printf("长度为%d\n",strlen(str)); for(i=0;iprintf("%-2c",str[i]); printf("\n"); for(i=strlen(str)-1;i>=0;i--) printf("%c",str[i]); } 这个可以满足要求

平乐县15953928458: 求助C语言问题:一个程序可以计算100以内的+、—、*、÷四则运算 -
敖栋千新:[答案] #include main(){ float a,b; char c,d; printf("请输入你要计算的数据:"); scanf("%f%c%f",&a,&c,&b); switch(c){ case '+': printf("%f+%f= %f\n",a,b,a+b);break; case '-': printf("%f-%f= %f\n",a,b,a-b);brea...

平乐县15953928458: 求助,一个C语言问题!! -
敖栋千新: 选D给你说一下三目运算符的实现,你就清楚了:条件运算符要求有三个操作对象,称为“三目运算符”.三目运算符条件表达式的形式:表达式1?表达式2:表达式3 说明:条件运算符的执行顺序:先求解表达式1的值,若其为真,则求解表达式2的值,且整个条件表达式的值等于表达式2;若表达式1为假,则求解表达式3的值,且整个条件表达式的值等于表达式3.所以表达式1的判断方式是判断表达式1的值是否为真,所以应该选D,判断w!=0为真的条件是表达式1的值不为0,但是不一定就必须为1,所以A不对

平乐县15953928458: 求助一个C语言问题 -
敖栋千新: struct stu{ int sid; float a[5]; }stud[100],*sp;int select(struct *sp,int n)//假设学生个数已知为n{int i,j; int count=0;//不及格人数 char lesson[5][]={"数学","语文","英语","c语言","Java"}; printf("学号 不及格的课程名 不及格成绩")...

平乐县15953928458: 求助一个c语言的题 -
敖栋千新: for(i=0;i<200-5;i++){for(j=1;j<=5;j++) if((a[i]<a[i+j])&&(a[i]%2==0)) b[cnt++]=a[i];}这个循环有问题.你的意思是只要a[i]小于后边的就赋值,与题意不一致.改为for(i=0;i<200-5;i++){if(a[i]<a[i+1]&&a[i]<a[i+2]&&a[i]<a[i+3]&&a[i]<a[i+4]a[i]<a[i+5]&&a[i]%2==0)b[cnt++]=a[i];}注意在开始的时候要定义一下cnt即int cnt=0;

平乐县15953928458: 菜鸟求助C语言的一个小问题忘大神帮忙 -
敖栋千新: #include<stdio.h> int main() { int a[10],x,*p,*q; printf("请输入十个整数:\n"); for(p=a;p<a+10;++p) scanf("%d",p); printf("请输入待删数据:"); scanf("%d",&x); for(p=q=a;p<a+10;p++) if(x!=*p) *(q++)=*p; if(q==p) printf("查无此数!\n"); else { for(p=a;p<q;) printf("%5d",*p++); printf("\n"); } }

平乐县15953928458: 求助一个c语言的小问题... -
敖栋千新: 答案是D;题目定义了三个变量,其中n是整型变量,p,q是指向整形变量的指针变量;指针p存放的是变量n的地址,然后又让q=p,q和p就都指向整形变量n了;答案abc都合法;d首先不是复制语句,而且p是指针变量,要做算数运算也应该是*p,即指针所指的变量;

平乐县15953928458: 求助C语言问题 -
敖栋千新: sizeof是编译时一元运算符,它的运算发生在编译是,只是简单的计算操作对象占多少内存空间"a0\0a0\0"是一个字符串常量,编译器会在后面添加'\0' 所以sizeof("a0\0a0\0")等于7 strlen在运行是计算,碰到第一个'\0'停止,不包括'\0' 所以strlen("a0\0a0\0")等于2

平乐县15953928458: 求助一个C语言问题
敖栋千新: 1(长度为0的子串,就是空串)+9(长度为1的子串)+8(长度为2的子串)+7+6+5+4+3+2+1=46

平乐县15953928458: c语言简单问题求助
敖栋千新: %f用于格式化浮点型数据的输出,a,b,2都是整型数据,所以(a+b)/2也是整型,用%f去格式化整型将不会将整型隐式转换为浮点型,所以显示结果为0.那么将表达式改为(a+b)/2.0是不是就可以呢?是的,表达式的值将为浮点型,符合%f.

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