编程从键盘输入二位十六进制数,统计其对应的二进制数中含1的个数,并在下一行以十进制显示出来。
时间: 2024-02-09 16:07:48 浏览: 88
以下是一个 C++ 的程序示例:
```cpp
#include <iostream>
#include <string>
#include <bitset>
int main() {
std::string input;
std::cout << "请输入一个二位十六进制数:";
std::cin >> input;
// 将输入转换为十六进制数
int num = std::stoi(input, nullptr, 16);
// 将十六进制数转换为二进制数,并计算其中1的个数
std::bitset<8> binary(num);
int count = binary.count();
std::cout << "二进制数:" << binary << std::endl;
std::cout << "其中含1的个数:" << count << std::endl;
std::cout << "十进制数:" << num << std::endl;
return 0;
}
```
程序先从键盘读入一个字符串,然后将其转换为十六进制数。接着,使用 `std::bitset` 类型将十六进制数转换为二进制数,并使用 `count()` 方法计算其中1的个数。最后输出二进制数、含1的个数以及十进制数。
相关问题
编一程序,从键盘输入二位十六进制数,统计其对应的二进制数中含1的个数,并在下一行以十进制显示出来。
下面是 Python 的实现代码:
```python
hex_num = input("请输入一个二位十六进制数:")
dec_num = int(hex_num, 16)
bin_num = bin(dec_num)[2:]
count = bin_num.count('1')
print("对应的二进制数中含1的个数为:", count, ",转换为十进制为:", count)
```
下面是 C++ 的实现代码:
```c++
#include <iostream>
#include <string>
using namespace std;
int main() {
string hex_num;
cout << "请输入一个二位十六进制数:";
cin >> hex_num;
int dec_num = stoi(hex_num, nullptr, 16);
string bin_num = bitset<8>(dec_num).to_string().substr(8 - 2);
int count = 0;
for (char c : bin_num) {
if (c == '1') {
count++;
}
}
cout << "对应的二进制数中含1的个数为:" << count << ",转换为十进制为:" << count << endl;
return 0;
}
```
汇编语言编一程序,从键盘输入二位十六进制数,统计其对应的二进制数中含1的个数,并在下一行以十进制显示出来。
以下是 x86 汇编语言的程序,可在 DOS 或 Windows 下运行:
```
.MODEL SMALL
.STACK 100h
.DATA
hex DB 2 DUP(?) ; 存储输入的十六进制数
bin DB 8 DUP(0) ; 存储转换后的二进制数
count DW 0 ; 存储含1的个数
msg1 DB '请输入一个二位十六进制数:', 0Ah, 0Dh, '$'
msg2 DB '对应的二进制数为:', 0Ah, 0Dh, '$'
msg3 DB '其中含1的个数为:', 0Ah, 0Dh, '$'
buffer DB 20 DUP(0) ; 存储转换后的十进制数字符串
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 输出提示信息
MOV AH, 9
LEA DX, msg1
INT 21h
; 读取十六进制数
MOV AH, 1
INT 21h
MOV hex[0], AL
INT 21h
MOV hex[1], AL
; 转换为二进制数并统计含1的个数
MOV BX, 0
MOV CX, 8
MOV SI, 0
convert_loop:
MOV AL, hex[SI]
CMP AL, '0'
JGE check_digit
SUB AL, 'A' - 10
JMP convert_next
check_digit:
CMP AL, '9'
JLE convert_next
SUB AL, 'a' - 10
convert_next:
CMP BX, 8
JE count_bits
MOV BL, 0
digit_loop:
SHL AL, 1
RCL BL, 1
JNC zero_bit
INC count
zero_bit:
LOOP digit_loop
MOV bin[BX], BL
INC BX
INC SI
JMP convert_loop
count_bits:
; 输出二进制数
MOV AH, 9
LEA DX, msg2
INT 21h
MOV CX, 8
MOV SI, 0
print_bin_loop:
MOV AL, bin[SI]
OR AL, '0'
MOV AH, 2
INT 21h
INC SI
LOOP print_bin_loop
; 输出含1的个数
MOV AH, 9
LEA DX, msg3
INT 21h
MOV AX, count
CALL WORD2DEC
MOV SI, OFFSET buffer
CALL PRINT_STRING
; 程序结束
MOV AH, 4Ch
INT 21h
MAIN ENDP
; 将 16 位的十进制数字转换为字符串
WORD2DEC PROC
PUSH AX
PUSH BX
MOV BX, 10
MOV CX, 0
word2dec_loop:
XOR DX, DX
DIV BX
PUSH DX
INC CX
CMP AX, 0
JNE word2dec_loop
MOV BX, 0
dec2str_loop:
POP DX
ADD DL, '0'
MOV BYTE PTR [buffer+BX], DL
INC BX
LOOP dec2str_loop
POP BX
POP AX
RET
WORD2DEC ENDP
; 输出字符串
PRINT_STRING PROC
PUSH AX
PUSH BX
PUSH CX
MOV AH, 9
print_loop:
MOV AL, [SI]
CMP AL, '$'
JE print_end
INT 21h
INC SI
JMP print_loop
print_end:
POP CX
POP BX
POP AX
RET
PRINT_STRING ENDP
END MAIN
```
该程序通过循环将输入的十六进制数转换为二进制数,并在转换过程中统计含1的个数。最后将二进制数和含1的个数输出。
阅读全文