① 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語言關系運算中負數是按0還是按1
0001
取反
1110
符號位為1,取反+1為
1010
轉化成10進制為
-2
正數的原碼,補碼,反碼都相同,都等於它本身
負數的補碼是:符號位為1,其餘各位求反,末位加1
反碼是:符號位為1,其餘各位求反,但末位不加1
也就是說,反碼末位加上1就是補碼
1100110011原
1011001100反除符號位,按位取反
1011001101補除符號位,按位取反再加1
正數的原反補是一樣的
在計算機中,數據是以補碼的形式存儲的:
在n位的機器數中,最高位為符號位,該位為零表示為正,為1表示為負;
其餘n-1位為數值位,各位的值可為0或1。
當真值為正時:原碼、反碼、補碼數值位完全相同;
當真值為負時:
原碼的數值位保持原樣,
反碼的數值位是原碼數值位的各位取反,
補碼則是反碼的最低位加一。
注意符號位不變。
如:若機器數是16位:
十進制數17的原碼、反碼與補碼均為:0000000000010001
十進制數-17的原碼、反碼與補碼分別為:1000000000010001、1111111111101110、1111111111101111
④ c語言中的特殊符號什麼意思代表什麼
expr :表達式lvalue:左值得(書上是:標示非常量的表達式)type:類型class_name:類名member:成員名pointer:指針表達式—————————————————————————————————————————————————————————優先性級:1-----------------------------------------------------------------------------------------------------------------------------------名稱:例子:作用域解析class_name::member作用域解析namespace_name::member全局::name全局::qualifide-name—————————————————————————————————————————————————————————優先性級:2-----------------------------------------------------------------------------------------------------------------------------------成員選擇object.member成員選擇pointer->member下標pointer[expr]函數調用expr(expr_list)值構造type(expr_list)後增量lvalue++後減量lvalue--類型識別typeid(type)運行時類型識別typeid(expr)運行時檢查的轉換dynamic_cast<type>(expr)編譯時檢查的轉換static_cast<type>(expr)不檢查檢查的轉換reinterpret_cast<type>(expr)const轉換 const_cast<type>(expr)—————————————————————————————————————————————————————————優先性級:3-----------------------------------------------------------------------------------------------------------------------------------對象的大小sizeof expr類型的大小sizeof(type)前增量 ++lvalue後增量 - -lvalue補~expr非!expr一元負號 -expr一元正號 +expr地址&lvalue間接* expr建立(分配)new type建立(分配並初始化)new type(expr-list)建立(放置)new (expr-list)type建立(放置並初始化)new (expr-list)type(expr-list)銷毀delete pointer銷毀數組delete [] pointer強制(type)expr—————————————————————————————————————————————————————————優先性級:4-----------------------------------------------------------------------------------------------------------------------------------成員選擇object .*pointer-to -member成員選擇object->*pointer-ro -member—————————————————————————————————————————————————————————優先性級:5-----------------------------------------------------------------------------------------------------------------------------------乘expr * expr除expr / expr取模(余數)expr % expr加(求和)expr + expr減expr - expr—————————————————————————————————————————————————————————優先性級:6-----------------------------------------------------------------------------------------------------------------------------------左移expr<<expr右移expr>>expr—————————————————————————————————————————————————————————優先性級:7-----------------------------------------------------------------------------------------------------------------------------------小於expr<expr小於等於expr<=expr大於expr>expr大於等於expr>=expr—————————————————————————————————————————————————————————優先性級:8-----------------------------------------------------------------------------------------------------------------------------------等於expr ==expr不等於expr != expr—————————————————————————————————————————————————————————優先性級:9-----------------------------------------------------------------------------------------------------------------------------------按位「異或」expr ^ expr—————————————————————————————————————————————————————————優先性級:10-----------------------------------------------------------------------------------------------------------------------------------按位「與」expr & expr—————————————————————————————————————————————————————————優先性級:11-----------------------------------------------------------------------------------------------------------------------------------按位「或」 expr | expr—————————————————————————————————————————————————————————優先性級:12-----------------------------------------------------------------------------------------------------------------------------------邏輯「與」expr && expr—————————————————————————————————————————————————————————優先性級:13-----------------------------------------------------------------------------------------------------------------------------------邏輯「或」expr || expr—————————————————————————————————————————————————————————優先性級:14-----------------------------------------------------------------------------------------------------------------------------------條件表達式expr? expr :expr—————————————————————————————————————————————————————————優先性級:15-----------------------------------------------------------------------------------------------------------------------------------簡單賦值lvalue =expr乘並賦值lvalue *= expr除並賦值lvalue/= expr取模並賦值lvalue % =expr加並賦值lvalue += expr減並賦值lvalue-= expr左移並賦值lvalue<<= expr右移並賦值lvalue >>=expr與並賦值lvalue & =expr或並賦值lvalue |=expr異或並賦值lvalue ^=expr—————————————————————————————————————————————————————————優先性級:16-----------------------------------------------------------------------------------------------------------------------------------異常拋出throw expr—————————————————————————————————————————————————————————優先性級:17-----------------------------------------------------------------------------------------------------------------------------------逗號(序列)expr,expr—————————————————————————————————————————————————————————
⑤ 在C語言中0減1為什麼是11
前面那個一是符號位,1代表負號,所以11是-1的意思,同樣01就是+1,明白了吧,呵呵
⑥ C語言符號全集合
c語言運算符號:
1級優先順序 左結合
() 圓括弧
[] 下標運算符
-> 指向結構體成員運算符
. 結構體成員運算符
2級優先順序 右結合
! 邏輯非運算符
~ 按位取反運算符
++ 自增運算符
-- 自減運算符
- 負號運算符
(類型) 類型轉換運算符
* 指針運算符
& 地址與運算符
sizeof 長度運算符
3級優先順序 左結合
* 乘法運算符
/ 除法運算符
% 取余運算符
4級優先順序 左結合
+ 加法運算符
- 減法運算符
5級優先順序 左結合
<< 左移運算符
>> 右移運算符
6級優先順序 左結合
<、<=、>、>= 關系運算符
7級優先順序 左結合
== 等於運算符
!= 不等於運算符
8級優先順序 左結合
& 按位與運算符
9級優先順序 左結合
^ 按位異或運算符
10級優先順序 左結合
| 按位或運算符
11級優先順序 左結合
&& 邏輯與運算符
12級優先順序 左結合
|| 邏輯或運算符
13級優先順序 右結合
? : 條件運算符
14級優先順序 右結合
=+ =- =*
=/ =% =
>= < <=
&= ^= |= 全為賦值運算符
15級優先順序 左結合
, 逗號運算符
⑦ c語言,大括弧那裡,負1怎麼來的
因為,255,就是 -1 的補碼。-1 是真值。
[-1]補 = 1111 1111B = 255。
你寫上 254,就會輸出 -2,
因為,254,就是 -2 的補碼。-2 是真值。
你寫上 253,就會輸出 -3,
因為,253,就是 -3 的補碼。
。。。。。。
你可以實驗一下,其它數字。
對於 char 變數,你輸入任何數字,都是當作補碼存入的,
輸出時,就都是真值。
如果補碼,還沒有弄明白,理解這個,比較吃力。
⑧ c語言中負數如何表示
寫成10進制 可以直接加負號
寫成16進制 最高位為1即可。
負數表示為補碼, 最高位為符號位 為1
其它位為原碼按位取反加一。
⑨ 在c語言中怎麼表示負數。
第一位符號位1為負,0為正。
正數的補碼和2進制原碼是一樣的。
負數的補碼:
1、先取絕對值|x|
;
2、對|X|+1
;
3、對|X|+1
取反,就得到它的補碼了
。
計算機中存放整型數據都是按補碼的形式存放的。
(9)01c語言哪個表示符號負號擴展閱讀:
有符號數的表示方法是由硬體決定,而不是由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語言 !(一個負數)等於啥
可以,但是結果會出錯,負數在計算機中最高位為1,作為符號標志(正數為0),但是如果賦給無符號整型變數,最高位的標志位就會變成數值位,計算時把這個1當成數值。