c++ - 在 C++ 中将十进制转换为二进制年份
问题描述
我编写了一个将十进制数字(出生日期)转换为二进制的程序。转换日期和月份工作顺利,但是在转换年份时出现问题,例如 2001 转换为 2521075409 而不是 11111010001。您能告诉我问题出在哪里吗?
{
int i;
long long temp, bin;
i = 1;
bin = 0;
printf("Number %d in binary: \n", year);
while (year > 0) {
temp = year % 2;
year /= 2;
bin += temp * i;
i *= 10;
}
printf("%lld\n\n",bin);
}
解决方案
使用int i;
,i *= 10
快速达到 32 位整数的最大限制0x7fff'ffff
。所以i
也需要是 64 位的,unsigned
所以上限可能会更高一点0xffff'ffff'ffff'ffff
。例子
unsigned long long i = 1;
unsigned long long bin = 0;
int year = 2001;
while (year > 0)
{
int temp = year % 2;
year /= 2;
bin += temp * i;
i *= 10;
printf("check i: %llu\n", i);
}
printf("%016llu\n\n", bin);
要打印更大的数字,请temp
在每次迭代中使用字符缓冲区进行保存。
推荐阅读
- ansible - 尝试输出到文件时出现 Ansible 标准输出脚本错误
- eclipse - 为什么我的 web.xml 文件以表格格式显示
- typescript - 在接口的每个方法中更改“this”上下文类型
- node.js - 在 docker-composer 中链接应用程序源时如何安装和使用 npm?
- docker - 带有卷装容器的 Docker swarm
- language-server-protocol - 如何手动请求 clangd 或实现 ClangdServer 以完成代码
- java - 我的菜单栏不在我的窗口顶部?
- reactjs - React Native 不显示图像
- python - 将 datetime.now() 添加到 print_exc
- arrays - 如何正确编写返回给定数组的方法