㈠ c语言二进制数的加减运算
1、二进制加法基本指令
(1)ADD指令
格式:ADD DST,SRC
该指令把源操作数(SRC)指向的数据与目的操作数(DST)相加后,将结果放到目的操作数(DST)中,所执行的操作:(DST)ß(SRC)+(DST)
SRC和DST不能同时为存储器操作数和段寄存器,同时SRC和DST的数据类型要匹配,要同是字节或字。受影响的标志位有:OF,SF,ZF,AF,PF,CF。
(2)ADC指令
格式:ADC DST,SRC
所执行的操作:(DST)ß(SRC)+(DST)+CF 了解清楚进位是怎样加的
该指令把两个操作数(SRC和DST)相加以后,再加上进位标志CF,将结果放到目的操作数(DST)中。受影响的标志位有:OF,SF,ZF,AF,PF,CF。ADC指令多用于多精度数据相加。
2、二进制减法基本指令
(1)SUB指令
格式:SUB DST,SRC
所执行的操作:(DST)ß (DST)-(SRC)
该指令把源操作数(SRC)指向的数据与目的操作数(DST)相减后,将结果放到目的操作数(DST)中,SRC和DST不能同时为存储器操作数和段寄存器(,同时SRC和DST的数据类型要匹配,要同是字节或字。受影响的标志位有:OF,SF,ZF,AF,PF,CF。
(2)SBB指令
格式:SBB DST,SRC
(DST)ß (DST)-(SRC)-CF 了解清楚进位是怎样减的
该指令把两个操作数(SRC和DST)相减以后,再减去CF,将结果放到目的操作数(DST)中。受影响的标志位有:OF,SF,ZF,AF,PF,CF。SBB指令多用于多精度数据相加。
㈡ C语言中进制的表示和转换
C语言中常用的有十进制、二进制、八进制(用0表示)、十六进制(用0x表示)。
十进制转二进制:
十进制转二进制采取除于2取余的方式。
将十进制数除于2得到商和余数,
将商继续除于2一直到商为0,
将得到的余数倒叙排列就是转换为二进制的结果
二进制转十进制:
从右向左用二进制位上的每一个数乘以2的相应次方
如二进制1010转换为十进制:
1010 = 0*(2的0次方)+1*(2的1次方)+0*(2的2次方)+1*(2的3次方) = 2 + 8 = 10
八进制转换为二进制
将二进制数自右向左每三位分为一段(若不足三位用0补齐),
然后将二进制的每三位转换为一位八进制数
如将二进制数0101010转换为八进制:
0 101 010不够三位的补0得到
000 101 010 = 052 = 0052(八进制用0表示)
十六进制转换为二进制
将二进制数自右向左每四位分为一段(若不足三位用0补齐),
然后将二进制的每4位转换为一位十六进制数
如将二进制数0101100转换为十六进制:
010 1100不够三位的补0得到
0010 1100 = 2C= 0x2C(十六进制用0x表示)
㈢ C语言的二进制,八进制,十进制是什么意思
在C语言里,数据可以表示为:十进制,八进制,二进制。
其中以数字0开头,由0~7组成的数是八进制。以0X或0x开头,由0~9,A~F或a~f 组成是十六进制。除表示正负的符号外,由0~1组成是二进制。
1.十进制:除表示正负的符号外,以1~9开头,由0~9组成。如,128,+234,-278。
2,八进制:以0开头,由0~7组成的数。如,0126,050000.
3,二进制:以0B或0b开头,由0,1 组成。如,0b12.
㈣ c语言中二进制怎么表示
C语言中并没有二进制表示方法
只有16进制 8进制和10进制
一般用16进制和十进制比较多。
要二进制输出 需正衡核要自己写函拦则数举掘。
㈤ C语言二进制怎么表示
c++中负数存储时,不是简单的将符号位置为1,而是采用补码的形式存储的,负数最高位为符号位,也就是1,其余全部取反,然后再加1。
假如操作系统是32位,-1的二进制存储不是:1000
0000 0000 0001,而是:1111 1111 1111 1110+1即1111 1111 1111 1111。
(5)c语言二进制表示算法应用扩展阅读:
C语言面向过程,与C++、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。
㈥ c语言 程序设计 关于二进制 数学表达式
下面是我写的代码:
/*---------------------------------代码--------------------------------------*/
#include <stdio.h>
#include <string.h>
// 转化后的二进制最多的位数
#define MAX_BIN_LENGHT 100
// 输入的表达式最多的字符数
#define MAX_EXP_LENGHT 100
// 根据表达式得到二进制数
void getBinary(char *express,int binary[MAX_BIN_LENGHT]);
// 根据两个二进制数,异或得到结果
void getXOR(int binaryY[MAX_BIN_LENGHT],int binaryG[MAX_BIN_LENGHT],int binaryResult[MAX_BIN_LENGHT]);
// 打印二进制数
void printBinary(int binary[MAX_BIN_LENGHT]);
int main(int argc,char *argv[])
{
int binaryY[MAX_BIN_LENGHT]={0}; // 存放Y(x)转化后的二进制数
int binaryG[MAX_BIN_LENGHT]={0}; // 存放G(x)转化后的二进制数
int binaryResult[MAX_BIN_LENGHT]={0}; // 存放两个二进制数异或后的结果
char express[MAX_EXP_LENGHT]; //存放输入的表达式
printf("请输郑巧入Y(x)表达式:\n");
scanf("%s",express);
getBinary(express,binaryY);
printf("请输入G(x)表达式:\n");
scanf("%s",express);
getBinary(express,binaryG);
// 得到异或结果
getXOR(binaryY,binaryG,binaryResult);
printf("\nY(x)的二进制为:");
printBinary(binaryY);
printf("G(x)的二进制为:");
printBinary(binaryG);
printf("二者异或结果为:");
printBinary(binaryResult);
return 0;
}
/**********************
* 根据表达式得到二进制数
***********************/
void getBinary(char *express,int binary[MAX_BIN_LENGHT])
{
int i;
int num=0;
char tempc;
for(i=0;i<strlen(express);)
{
if(*(express+i)=='^')
{
// 如果是^号,拿孙表示接下来的就是指数了
for(i=i+1;i<strlen(express);i++)
{
tempc=*(express+i);
if(tempc>='0' && tempc<='9')
{
num=num*10+(tempc-'0');
if((i+1)>=strlen(express))
{
binary[num]=1;
}
}
else
{
/*
得到相应的指数,将对应的二进制位数设置为1。
此时二进制的最低位对应的是binary[0],二进制的最高位对应的是binary[MAX_BIN_LENGHT-1]
*/
binary[num]=1;
num=0;
break;
}
}
}
else
{
if(*(express+i)=='1'&& (i+1)>=strlen(express))
{
// 如果最后一个数字是1,那么二进制最低位binary[0]设置为1
binary[0]=1;
}
i++;
}
}
}
/**************************
* 根据两个二进制数,喊敏键异或得到结果
**************************/
void getXOR(int binaryY[MAX_BIN_LENGHT],int binaryG[MAX_BIN_LENGHT],int binaryResult[MAX_BIN_LENGHT])
{
int i;
// 分别异或每一位
for(i=0;i<MAX_BIN_LENGHT;i++)
{
// 两个相同,则置0
if(binaryY[i]==binaryG[i])
{
binaryResult[i]=0;
}
// 两个不同,则置1
else
{
binaryResult[i]=1;
}
}
}
/**************************
* 打印二进制数
**************************/
void printBinary(int binary[MAX_BIN_LENGHT])
{
/*
*因为binary数组中binary[0]存放的是二进制的最低位,binary[MAX_BIN_LENGHT-1]存放的是二进制的最高位,
*所以输出二进制数时,必须要将数组倒序输出
*/
int i;
for(i=MAX_BIN_LENGHT-1;i>=0;i--)
{
if(binary[i]==1)
{
for(;i>=0;i--)
{
printf("%d",binary[i]);
}
}
else if(i==0)
{
printf("%d",binary[i]);
}
}
printf("\n");
}
/*----------------------------------测试结果-------------------------------------*/
请输入Y(x)表达式:
Y(x)=x^5+x^3+x^2+1
请输入G(x)表达式:
G(x)=x^3+x^2+1
Y(x)的二进制为:101101
G(x)的二进制为:1101
二者异或结果为:100000
/*-----------------------------------------------------------------------*/
下面是一些问题:
1. 你的第三条中写道“3)然后101101 和1101 得异或 其中1101为被除数。”,这一条我没怎么看明白,这两个数异或哪里来的被除数啊?这一点我有点疑惑,在程序中我把你的第3条理解为求二者的异或值。
2. 这个程序中是假设你输入的表达式是完全符合标准的,没有对一些错误的输入(比如输入Y(x)=x^dd+x^001+x^e2e+34+gg)这一类错误表达式的检测,这一点要注意。
3. 开头的两个宏定义二进制最多的位数MAX_BIN_LENGHT、输入的表达式最多的字符数MAX_EXP_LENGHT,你可以根据自己的需要自行更改其具体的大小。
㈦ c语言中的二进制,八进制,十进制,十六进制都怎么算……,可否举例,谢
先讲一下,二进制与十进制。
以10为例,过程如图。
10进制转化为二进制
10÷2=5....0(余数为0)
5÷2=2....1(余数为1)
2÷2=1....0
1÷2=0....1
然后,非常重要的一步,将余数倒序相加
即:1010
这里特地说明一下,当被除数比除数小时,余数永远为它自己。
如:8÷10 余数为8
二进制转化为十进制
1010
从 右 算起分别对应 :
1 2 4 8
也就是 2的1次方,2次方,3次方
第三步,小数部分怎么计算呢
如10.1
很简单,将0.1乘以2
在乘到整数之前,将结果的整数取出。
如:
0.1x2=0.2.....0
0.2x2=0.4.....0
0.4x2=0.8......0
0.8x2=1.6......1
正序排下来: 0001
至于八进制和十六进制,其实是一样的方法。就是把2换成8。
顺便说一下,如果你是要做开发而不是考试的话可以直接用win系统自带的计算器,选择“程序员” 模式可以直接得到2.8.10.16进制的所有结果。
㈧ 二进制求余数(模2算法),怎么用C语言实现
求得结果是返回得到的余数么?是转换为二进制还是??
如果是转换为二进制则代码如下:
//test3.cpp:定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<stdio.h>
#include<iostream>
#include<math.h>
usingnamespacestd;
voidcomput(intx,char*s);
int_tmain(intargc,_TCHAR*argv[])
{
intx,i;
chars[32];
scanf("%d",&x);
comput(x,s);
for(i=strlen(s),i--;i>=0;i--)
{
cout<<s[i];
}
printf(" ");
system("pause");
return0;
}
voidcomput(intx,char*s)
{
inty;
inti=0,j;
while(true)
{
if(x%2==0)
{
s[i++]='0';
}
else
{
s[i++]='1';
}
j=x/2;
x=j;
if(j==0)
{
s[i]='