当前位置:首页 » 编程语言 » c语言里有两个负号吗
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言里有两个负号吗

发布时间: 2022-09-04 11:32:17

1. 在c语言中怎么表示负数。

第一位符号位1为负,0为正。 正数的补码和2进制原码是一样的。

负数的补码:

1、先取绝对值|x| ;

2、对|X|+1 ;

3、对|X|+1 取反,就得到它的补码了 。

计算机中存放整型数据都是按补码的形式存放的。

(1)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。

2. C语言编辑中两个符号在一起或两个正号在一起是什么意思

++i 的意思是自加 i= i+1;
--i 的意思时候i = i -1;
i++ 的意思是i = i+1;与++i的区别是表达式返回不一样,++i为先自加,再求表达式;i++为先求表达式值,再自加;例如:
i = 0;
j = 0;
k = (++i);// k = 1;
k=(j++);//k=0;
-------------------------
-i++ 的意思是 -(i++),前面的为负号,后面为自加。

3. C语言中怎么判断输入字符串中有负号和小数点

用这个函数
char * strchr(char *s, int c) int c这个就是填写要找的字符 如果s中包含字符c 就返回一个指向s中第一次出现该字符的位置的指针,否则返回NULL
如 if(strchr(s,'-')!=NULL)

4. 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;
}

5. 用C语言表达式表达 int a,b,c; a,b,c中有两个负数的表示是( )

1、
if(a*b*c>0)
/*这样可以判断出有两个是负数*/
{
.......
}
2、
if(a<0&&b<0||b<0&&c<0||a<0&&c<0)
/*这样也可以判断出来有两个数是负数*/
{
.......
}

6. C语言中负号占几个字符

负号不占有字符。它取决于数值的最高位的状态!1为负,0为正。

7. 求大神 关于C语言的几个问题 - -of1 两个负号是合法整型常量吗 12,456 是合法整型常量吗 ,逗号是什么

+1e+1,.8e-4 ,5.e-0是合法浮点数。

"a"是正确的字符串常量表示,实际上还有一个结束标志'\0',所有字符串包含两个字符,一个是隐含的。

'&'这个不是转义字符

你说代码值大概是指变量的值吧

8. c语言中负数如何表示

c语言中负数表示方法就是在数前加负号“-”,比如:
-5,-10000,等
一个变量赋值为负数也是如此,比如:
x=-1000;

9. C语言如何表示正负值问题

c语言有两种数据类型,一种是整型,一种是浮点型 ,整型类型一般用的原码表示,浮点类型一般用的IEEE754标准进行编码。

整型数中原码表示正负数,取最高位为符号位,以8位二进制数来表示1和-1。1的二进制为
0 000 0001 //最高位为符号位,0表示正数,1表示负数
1 000 0001 //这个表示-1

IEEE754浮点数编码,使用的格式类似于 (-1)^s * M* 2^E,其中s是符号位,M是有效位数,E指的是指数,s符号位占1位,如果是0,则(-1)的0次方为1,表示是一个正数,如果s位是-1,则表示是一个负数。