C 用void计算二进制数
如果我使用void numberToBinaryint binaryArr[],int numberOfElements将一个数字转换为一个二进制数,我将如何进行转换?我尝试了一个我从早期实验室使用的代码,但它与程序不兼容。我不知道该怎么处理这个空白部分。目前,我的输出只是二进制: 二进制文件之后没有打印内容C 用void计算二进制数,c,C,如果我使用void numberToBinaryint binaryArr[],int numberOfElements将一个数字转换为一个二进制数,我将如何进行转换?我尝试了一个我从早期实验室使用的代码,但它与程序不兼容。我不知道该怎么处理这个空白部分。目前,我的输出只是二进制: 二进制文件之后没有打印内容 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <wiring
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <wiringPi.h>
void numberToBinary(int arr[], int numOfBits, int userNum);
void addOne(int arr[], int numOfBits);
void flipBits(int arr[], int numOfBits);
void printArray(int binaryArr[], int numberOfElements);
void binaryToLED(int binaryArr[], int numOfBits, int pinNumbers[]);
int main(void) {
if (wiringPiSetup() == -1) {
puts("Raspberry Pi setup failed. Check the wiringPi library. ");
return 1;
}
int numOfBits;
printf("How many bits? ");
scanf("%d", &numOfBits);
int pinNumbers[numOfBits];
int userPin;
for (int i = 0; i< numOfBits; i++) {
printf("Enter the pin number for LED %d: ", i+1);
scanf("%d", &userPin);
pinNumbers[i] = userPin;
pinMode(pinNumbers[i], OUTPUT);
}
int binaryArr[numOfBits];
int upperBound = 16;
int lowerBound = 0;
int userNum;
printf("\n \n%38s", "Number to Binary Converter");
printf("\n \n%44s", "Enter number between 127 and -128 to be converted to binary. Enter a non-numeric input to end.");
printf("\n \n\n");
while(scanf("%d", &userNum) ==1) {
if((userNum < lowerBound) || userNum > upperBound) {
printf("%d is out of range. \n", userNum);
printf("Enter a number within -127, 128 to be respresented.");
continue;
}
for (int i = 0; i < numOfBits; i++) {
binaryArr[i] = 0;
}
numberToBinary(binaryArr, numOfBits, abs(userNum));
if (userNum < 0) {
flipBits(binaryArr, numOfBits);
addOne(binaryArr, numOfBits);
}
printf("Binary: ");
printArray(binaryArr, numOfBits);
puts("");
binaryToLED(binaryArr, numOfBits, pinNumbers);
}
return EXIT_SUCCESS;
}
void addOne(int arr[], int numOfBits){
}
void printArray(int binaryArr[], int numberOfElements) {
int i;
}
void numberToBinary(int binaryArr[], int numOfBits, int userNum) {
}
void flipBits(int binaryArr[], int numOfBits){
for(int i = 0; i< numOfBits; i++){
if(binaryArr[i] ==1) {
binaryArr[i] ++;
}
}
return;
}
void binaryToLED(int binaryArr[], int numOfBits, int pinNumbers[]) {
for(int i = 0; i < numOfBits; i++) {
digitalWrite(pinNumbers[i], binaryArr[i]);
}
delay(5000);
for(int i = 0; i < numOfBits; i++) {
digitalWrite(pinNumbers[i], 0);
}
return;
}
将数字转换为二进制数
只需要一个整数
#define ON_TIME 5000
void binaryToLED(unsigned number, int numOfBits), int pinNumbers[]) {
int i;
for (i = 0; i<numOfBits; i++) {
digitalWrite(pinNumbers[i] , number & 1);
numer >>= 1;
}
delay(ON_TIME);
for (i = 0; i<numOfBits; i++) {
digitalWrite(pinNumbers[i] , 0);
}
}
// Pass in address of the integer
void flipBits(unsigned *number, int numOfBits){
if (numOfBits > 0) {
unsigned mask = 1u << (numOfBits-1);;
*number ^= mask;
}
}
使用void what?@tadman刚刚解决了一个问题,您需要展示如何使用这个函数,特别是使用示例输入和输出。@tadman我刚刚发布了我的全部代码。当然更好。将有助于包含一个让您感到困惑的特定用例,因为如果我们要测试它,有很多方法可以使用它。例如,binaryArr是否应包含一系列值(如1或0)或ASCII字符(如“1”或“0”)?也许sprintf就是答案。也许不是!这样我就可以去掉其他的空隙了@chux@KatieS还需要打印阵列吗`