0%

由一道新生作业引发的思考

竟然没有能直接输出二进制的参数😂

一.题目

这道题如下:

1
a||b+c&&b-c的值是(?)

考点:

1.逻辑运算符

1
2
3
&&:逻辑与:都非0则结果为1
||:逻辑或:有一个非0结果为1
!:真假互换

比较区分:位运算符

1
2
3
4
5
6
&:二进制按位与
|:二进制按位或
^:二进制按位异或
~:二进制按位取反
<<:二进制按位左移,最左侧的丢弃,右侧补0
>>:二进制按位右移,正数左侧补0,负数左侧补1,右侧丢弃

2.运算的优先级问题

先做+-,后做||和&&

二.正题

十进制转二进制有如下方法:

1.itoa函数:将整数转化为字符串

2.除数取余法:递归思想

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
#include<stdlib.h>
#define uint32 unsigned int

void FuncOutput(uint32 value,int Radix){
char buffer[33] ;
itoa(value,buffer,2);
printf("%s\r\n",buffer);
}
void DivdOutput(uint32 value){
if (value >> 1) {
DivdOutput(value >> 1);
}
putc((value & 1) ? '1' : '0', stdout);
}
int main(){
int a = 114514 ;
FuncOutput(a,2) ;
DivdOutput(a) ;
return 0;
}
//11011111101010010
//11011111101010010

三.一些奇怪的关联

付少峰老师曾经在数电课提过这样一个问题:

计算机做自加快还是做自减快?

先上答案:自减

编程测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<string.h>
#include<time.h>
int main(){
clock_t start_time = clock();
int count = 1000000000 ;
int i ;
for(i=0;i<count;i++){}
printf("自加用时:%ums\r\n",(clock()-start_time));
clock_t cl = clock();
for(i=count;i>0;i--){}
printf("自减用时:%ums\r\n",(clock()-cl));
return 0 ;
}
//1141ms
//453ms
-------------本文结束感谢您的阅读-------------
请作者喝一杯蜜雪冰城吧!