c語言負號
㈠ c語言中基本算數運算符里的取負號和減號有什麼區別
有啊,要看你怎麼用,如果你是單個使用的話,如:a=-b,那麼就是負號,因為是一個操作數,而如果是a=b-c,那麼就是減號,因為兩邊都有操作數,有區別的,主要就是要看有幾個操作數
了
㈡ 在c語言中怎麼表示負數。
第一位符號位1為負,0為正。 正數的補碼和2進制原碼是一樣的。
負數的補碼:
1、先取絕對值|x| ;
2、對|X|+1 ;
3、對|X|+1 取反,就得到它的補碼了 。
計算機中存放整型數據都是按補碼的形式存放的。
(2)c語言負號擴展閱讀:
有符號數的表示方法是由硬體決定,而不是由C決定的。有三種表示方法:
1、二進制原碼
0000 0001 表示 1
1000 0001 表示 -1
這個方法有個缺點是有兩個零: +0 和 -0。這會引起混淆,而且用兩個位組合來表示一個值也有些浪費。
2、二進制補碼(最普遍的系統)
區別在於 singned 和 unsigned:
1)如果是無符號位元組, 1000 0000 該組合為 128
2)如果是有符號位元組, 1000 0000 該組合為 -128
第一種表示數的范圍是 0 ~ 255;
第二種表示數的范圍是 -128 ~ +127,對於一個二進制補碼數取負數,最簡單的方法就是取反、加 1。
3、二進制反碼
通過反轉位組合中的每一位以形成一個數的負數,例如:
0000 0001 表示 1
1111 1110 表示 -1
這種方式也有一個 -0:1111 1111。其范圍是 -127 ~ +127。
㈢ 負號在c語言中是一次性的嗎
你好!
結合性,按計算順序來
先i++再-
-(負號)表示一元運算符,自右向左
-(減號)表示二元運算符,自左向右
printf("%d\n",-i++);
列印結果
-8
printf("%d\n",i--);
列印結果9
僅代表個人觀點,不喜勿噴,謝謝。
㈣ C語言中負號占幾個字元
表達式中的負號?還是一個數的負號?
表達式中當然佔一個字元。
一個數的符號,占這個數的最高一位。
比如int16 ,最高位是符號位,低15位是其數值;
int32,b31是符號位,b30,b29,....b0是其數值
㈤ c語言中負數如何表示
c語言中負數表示方法就是在數前加負號「-」,比如:
-5,-10000,等
一個變數賦值為負數也是如此,比如:
x=-1000;
㈥ 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;
}
㈦ C語言中是直接輸入負數的嗎
是的,可以直接輸入負數。
C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。
簡介
C語言是一門面向過程的計算機編程語言,與C++、C#、Java等面向對象編程語言有所不同。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
C語言描述問題比匯編語言迅速、工作量小、可讀性好、易於調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編語言代碼生成的目標程序效率低10%-20%。因此,C語言可以編寫系統軟體。
當前階段,在編程領域中,C語言的運用非常之多,它兼顧了高級語言和匯編語言的優點,相較於其它編程語言具有較大優勢。計算機系統設計以及應用程序編寫是C語言應用的兩大領域。同時,C語言的普適較強,在許多計算機操作系統中都能夠得到適用,且效率顯著。
㈧ c語言中如何利用scanf輸入負數
C語言中用scanf()輸入負數和輸入整數是一樣的,舉個例子int a;
scanf(&a);把輸入的數存入變數a中 , 這個int就是有符號整形數,既可以是負數也可以是正數, 如果你定義成unsigned int a ;那麼就只能輸入正數了,因為是無符號的也就是范圍是大於等於0的。
㈨ c語言優先順序別里的 正號負號 和 加減 怎麼判斷哪個是哪個
加減號是雙目運算符,必須兩邊都有數據(變數或常數),結合性從左至右,即可簡單理解為從左至右計算。正負號是單目運算符,只有一個數據,且是右結合的,可以理解為它只作用在緊接它的右邊的數據上。如a+b、a-b中的+和-是加減號,而-x、+y中的+和-是正負號。所以它們在C語句中是很好識別的。