㈠ 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]='