㈠ c语言 结果 出现巨大的负数
对于有符号数(分正负的),的最高位是符号位
65的二进制是
0
1000001
补码运算为按位取反
再加1
按位取反:1
0111110
加1:
1
0111111
直接转换为十进制的话,你把它当成无符号数把1也算了,所以不是-65
从
10111111到-65:
计算机根据符号位为1判断是负数
按位取反:01000000
加1:
01000001
这就是65,然后是负数,就是-65
㈡ 在C语言里要输出一个负数的值!
type(数的类型)number(你要输出的数);
printf("% +d",number)
例如
int i=-617;
printf("% +d",i);
"+"号是输出符号的
㈢ c语言负数的++等于多少
负数是有符号位的,在计算机中以补码的形式储存,最高位为1表示负数,其余位按位取反再加1,然后你再把二进制转换成8进制和16进制就可以了。
在c语言中,你可以用printf("%x",-617);输出16进制
用printf("%o",-617);输出8进制
㈣ c语言问题,为什么会输出负数
这个问题有多种可能,不一而足。
算法有错误,最终计算结果是负数。输出自然会是负数。
例如:
inta=1;
intb=a-2;
printf("b=%d",b);
//输出结果:b=-1超过变量类型的最大取值范围,发生溢出。
例如Turbo C里int是16位,取值范围-32768~32767。如果计算过程当中,数值超过32767,由于补码的关系。结果就有可能是负数。这种情况,就需要使用取值范围更大的数据类型。
例程:
#include<stdio.h>
voidmain(){
inta,b,ch;
a=32767;
b=a+1;
printf("a=%d,b=%d",a,b);
ch=getch();
}
//输出结果:a=32767,b=-32768
㈤ 在c语言中如何比较负数的大小
#include<stdio.h>
voidmain(void)
{
inta,b,c,max;
printf("inputthreerealnumbers: ");
scanf("%d%d%d",&a,&b,&c);
if(a>=b)
max=a;
else
max=b;
if(max>=c)
printf("%d",max);
else
printf("%d",c);
getch();
return0;
}
(5)c语言负数扩展阅读
C语言signedchar型表示的数值范围-128~127
-0和+0其实是同一个数字,因此原码中0b10000000和0b00000000都表示数字0。现在补码下的0只有一个表示方式:0b00000000,二进制码0b10000000就多余出来了。
浪费是可耻的,多出的二进制码0b10000000不能白白丢弃。若考虑数字0的二进制码0b00000000,从它的符号位来看,计算机应该是将其当做“正数”的,0~127是128个“正数”。
现在考察多出的二进制码0b10000000,从它的符号位来看,把它当做负数是合情合理的,事实上在C语言中,它表示-128,从-128到-1,恰好是128个“负数”。
㈥ 判断某数是否为负数的程序用C语言怎么写
#include
int main()
{
int i;
printf("请输入数字\n");
scanf("%d",&i);
if(i>=0)
{
printf("这个数字为非负数");
}
else
printf("这个数字为负数");
}
㈦ C语言 !(一个负数)等于啥
可以,但是结果会出错,负数在计算机中最高位为1,作为符号标志(正数为0),但是如果赋给无符号整型变量,最高位的标志位就会变成数值位,计算时把这个1当成数值。
㈧ c语言中负数如何表示
c语言中负数表示方法就是在数前加负号“-”,比如:
-5,-10000,等
一个变量赋值为负数也是如此,比如:
x=-1000;
㈨ c语言为什么输入负数之后结果是错的
两种解决方法,你自己选择一种:
一、
1、把long x,y;改成int x,y;
2、把所有的%ld改成%d
二、
1、把函数定义语句改为long fun(long x)
如果有不明白之处,请留言。
㈩ C语言 负号问题
只能是在程序里判断‘-’这个字符。你需要能够判断出‘-’是一个减号还是一个负号。
比较简单的方法是,输入计算式时你规定好格式,负数一律用()括起来。这样比较容易判断是不是负数。当然你也可以定义其它的格式。
如果不规定格式的话,判断方法稍微麻烦一点,你要判断‘-’前面是什么,如果是数字,那么 ‘-’为减号,如果是‘)’,那么‘-’为减号,如果是‘+-*/’号,那么‘-’为负号。如果什么也没有,那么表明是起始数字,那么‘-’为负号。等等,需要考虑周全。
=======下面是一个例子==============
#include "stdafx.h"
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#define maxlen 100
typedef struct node{
char ch;
int data;
struct node *next;
}LinkList;//保存表达式的链表
int func()
{
LinkList *ta,*tb,*tc,*td;
ta = La;
tc = Lb;
for(int n=0;n < i;n++)
{
ta=ta->next;
}
tb = ta;
for(n=0; n < Len; n++)
{
tb=tb->next;
}
ta->next = tb;
for(n=0; n < j; n++)
{
tc=tc->next;
}
td = tc->next;
tc->next =
}
typedef struct{
char stack[maxlen];
int top;
}Stack1;
typedef struct{
int stack[maxlen];
int top;
}Stack2;
int In(char c){
if((c=='+')||(c=='-')||(c=='*')||(c=='/')||(c=='#')||(c=='(')||(c==')')||(c=='A')||(c=='S'))
return 1;
else
return 0;
}
void InitStack1(Stack1 *S){
S->top=-1;
}
void InitStack2(Stack2 *S){
S->top=-1;
}
void Push1(Stack1 *S,char ch){
S->top++;
S->stack[S->top]=ch;
}
void Push2(Stack2 *S,int ch){
S->top++;
S->stack[S->top]=ch;
}
char Precede(char ch1,char ch2){//比较两个运算符的优先级
char ch;//当ch为<时表示ch1的优先级要小于ch2,反之同理
switch(ch1){
case '+':if((ch2=='*')||(ch2=='/')||(ch2=='(')) ch='<';else ch='>';break;
case '-':if((ch2=='*')||(ch2=='/')||(ch2=='(')) ch='<';else ch='>';break;
case '*':if((ch2=='(')) ch='<';else ch='>';break;
case '/':if((ch2=='(')) ch='<';else ch='>';break;
case '#':if(ch2=='#') ch='=';else ch='<';break;
case '(':if(ch2==')') ch='=';else ch='<';break;
}
return ch;
}
void Pop1(Stack1 *S,char *p){
*p=S->stack[S->top];
S->top--;
}
void Pop2(Stack2 *S,int *p){
*p=S->stack[S->top];
S->top--;
}
char GetTop1(Stack1 *S){
return S->stack[S->top];
}
int GetTop2(Stack2 *S){
return S->stack[S->top];
}
void print1(Stack1 *s){
printf("运算符栈: ");
int h=s->top;
while(h!=-1){
printf("%c ",s->stack[h]);
h--;
}
printf("\n");
}
void print2(Stack2 *s){
printf("数字符栈: ");
int h=s->top;
while(h!=-1){
printf("%c ",s->stack[h]);
h--;
}
printf("\n");
}
int Operate(int a,char theta,int b){//对a和b进行运算
int s;
switch(theta){
case '+':s=a+b;break;
case '-':s=a-b;break;
case '*':s=a*b;break;
case '/':s=a/b;break;
}
return s;
}
LinkList *CreatList(){
LinkList *H,*s,*r;
H=(LinkList*)malloc(sizeof(LinkList));
H->next=NULL;
r=H;
char c;
c=getchar();
while(c!='#'){
s=(LinkList*)malloc(sizeof(LinkList));
s->ch=c;s->next=NULL;
r->next=s;r=s;
c=getchar();
}
s=(LinkList*)malloc(sizeof(LinkList));
s->ch=c;s->next=NULL;
r->next=s;r=s;
return H;
}
LinkList *Change(LinkList *H){
LinkList *p,*pre;p=H->next;pre=H;
while(p!=NULL){
if(In(p->ch)){p=p->next;pre=pre->next;}
else{ //将字符转化成数字
int m=0,n;
while(!In(p->ch)){
n=p->ch-'0';
m=10*m+n;
LinkList *u=p;
p=p->next;
if(!In(p->ch)){ pre->next=p;free(u); }
else{ u->data=m;u->ch='@';pre=pre->next; }//@标志此节点内的符号为数字
}
}
}
return H;
}
LinkList *jisuan(LinkList *H){//对链表中的数据进行初步的计算
LinkList *p,*U,*pre;
p=H->next;pre=H;int a;
while(p!=NULL){
if(p->ch!='A'&&p->ch!='S'){
pre=pre->next;
p=p->next;
}
else{
if(p->ch=='A')
a=fabs(p->next->data);
else
a=sqrt(p->next->data);
p->next->data=a;
U=p;
p=U->next;
pre->next=p;
free(U);
}
}
return H;
}
int main(int argc, char* argv[])
{
printf("*******************************************************************************");
printf("\n");
printf(" 欢迎使用模拟计算器程序\n");
printf("*******************************************************************************");
Stack1 OPTR1,*OPTR=&OPTR1;
Stack2 OPTR2,*OPND=&OPTR2;
InitStack1(OPTR);
Push1(OPTR,'#');//将‘#’压入OPTR栈中
InitStack2(OPND);
char c,x,theta;
int a,b,s;
printf("请输入表达式,以#结束:");
LinkList *H,*p,*q;
H=CreatList();
H=Change(H);
H=jisuan(H);
p=H->next;
c=p->ch;
while((c!='#')||(GetTop1(OPTR)!='#')){//#同时是表达式的截止符
if(c=='@'){
s=p->data;
Push2(OPND,s);
p=p->next;
c=p->ch;
}
else
switch(Precede(GetTop1(OPTR),c)){
case '<':Push1(OPTR,c);p=p->next;c=p->ch; break;
case '=':Pop1(OPTR,&x); p=p->next;c=p->ch; break;
case '>':Pop1(OPTR,&theta); Pop2(OPND,&b); Pop2(OPND,&a);
Push2(OPND,Operate(a,theta,b));break;
//Operate之后,对C继续判断,所以不用getchar()
}
}
s=GetTop2(OPND);
printf("结果为:");
printf("%d\n",s);
return 0;
}