C语言如何定义一个16进制数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何定义一个16进制数相关的知识,希望对你有一定的参考价值。
想用SCANF输入一个16进制数,不知道如何定义.
例:
int main()
int a;
scanf("%p",&a);//16进制数输入%p是输入一个十六进制的数scanf("%llx",&a);也可以输入十六进制并且比较正规
printf("%d",a);//十进制输出%d是输出一个十进制的数
printf("0x%x",a);//16进制输出printf("%llX\\n",a);也可输出一个十六进制数如果红色部分大写X则输出十六进制为大写字母否则小写x输出为小写字母
参考:
最大数字是15位,没有超过__int64能表达的最大数。__int64最大能表示16位十六进制数。所以直接进行加减就行了,需要注意的是输入输出的格式以及十六进制表达负数的时候显示的是补码。
#include<stdio.h>
int main(void)
long long a,b,result;
while(scanf("%llx%llx",&a,&b)!=EOF)
result=a+b;
if(result>=0)
printf("%llX\\n",result);
else
printf("-%llX\\n",-result);
return 0;
long long 类型格式字符:
扩展资料:
return用法:
作用是结束正在运行的函数,并返回函数值。return后面可以跟一个常量,变量,或是表达式。
函数的定义一般是这样的,例如:
int a(int i)//第一个int是函数的返回值的类型,也就是return后面跟的值的类型,a是函数的名称,括号里的是传递给函数的参数,int是参数的类型,i是参数的名字
...//省略函数体内容
return b;//b必须与函数头的返回值一致(此处为int型)
简单函数举例:
int addOne(int b)
return b+1;
该函数的作用是取得一个数,将这个数加上1,再将结果返回
调用时这样:
int result=addOne(2);//此时result的值为3
函数括号里的参数也可以为变量或能算出值的表达式
以上就是一个基本的函数,一般的函数都有返回值,也就是return后面跟的值,返回值可以为各种数据类型,如:int,float,double,char,a[](数组),*a(指针),结构或类(c++)
但不是所有函数都有返回值,如果某个函数无返回值,那么返回值的位置则为“void”关键字,此时函数体中无返回值,即无return的值。但是函数中也可出现return,即一个空的return句子,其作用是使函数立即结束,如
void print()//括号中为空表示无传递参数
printf("a");
printf("b");
return;//函数执行到此处结束
printf("c");
//该函数只执行到return语句处,即屏幕上输出的为"ab"
参考技术A 整型数据的十六进制数表示,unsigned int hex_val = 0x123; //定义了一个整型变量并赋以初始值为一个十六进制常量。
if (scanf("%x", &hex_val) != EOF)
printf("它的八、十进制分别=%o、%d\n", hex_val, hex_val);
你也可以输入一个由0-9-A-F中组成的连续的字符序列,然后检查它是否为合法的十六进制数格式,最后,如果需要,可用函数strtoul将这个字符串指针作为base参数转换成数值。 参考技术B unsigned long int value; _Bool hex_value = scanf("%x", &value); //用说明转换%xif(hex_value) //正确输入了一个合法的十六进制值 .... 或者用字符串:#include <ctype.h>#include <string.h>const int LEN = 32;char hexstr[LEN + 1]; fgets(hexstr, LEN, stdin);hexstr[strchr(hexstr, '\n') - hexstr] = '\0';// 检查是否是合法的十六进制串,size_t i = 0;while(hexstr[i] != '\0') if(strchr("0123456789AaBbCcDdEeFf", hexstr[i]) == NULL) // or use (! isxdigit(hexstr[i])) break; ++i;bool hexValue = (hexstr[i] != '\0');if(hexValue) ...//随便写下,您可能要涉想问到如何保证一个十进制数的数字编码具有连续的值,那么可以用下面这种惯用法实现(无溢出检查)数字转换功能 ^ ^,给你写出来int chtoi(const char ch) if('0'<=ch && ch <='9') //or use isdigit(ch) return (ch - '0'); else return (-1);for(value = 0; isdigit(*sc); ++sc)
value = value * 10 + chtoi(*sc); 参考技术C 没有直接定义的
八进制,在赋值的数字前面加0 如int n=010; 即把一个八进制10复制十进制变量n
十六进制,在赋值的数字前面加0x 如int n=0x10;即把一个十六进制10复制十进制变量n 参考技术D scanf("%x",&a);
C语言编程中数组的定义
12.20写的小程序:输入整型,输出16进制的数;将各个位求和;并将16进制的数翻转;最后再将它转化为10进制数输出
#include <stdio.h>
#include <math.h>
void main()
int num;
printf("请输入一个十进制整数:");
scanf("%d",&num);
int a[2]; //这里的数组长度应当依据什么来定义
int i=0;
int yushu;
while(num>0)
yushu=num%16;
a[i]=yushu;
num=num/16;
i++;
printf("转化为十六进制的数为:");
for(;i>=0;i--)
printf("%x",a[i]);
printf("\n");
int sum;
sum=0;
for(i=0;i<2;i++)
sum=sum+a[i];
printf("十六进制的各个位之和:");
printf("%d\n",sum);
printf("十六进制翻转为:");
int b[2];
for(i=0;i<2;i++)
b[i]=a[i];
printf("%x",b[i]);
printf("\n");
int c;
c=0;
for(i=0;i<2;i++)
pow(16,i);
c=c+a[i]*pow(16,i);
printf("转化为十进制的数为:%d\n",c);
问题:在运行时,数组长度不一样,运行的结果可能会出错,但我现在还不明白应该依据什么来定义。
太谢谢了,虽然不是很理解,但是如果是a[10]的话,运行就会出错啊,比如是输入100,16进制电脑会输出ccccccc64,而如果是a[2]的话,就会输出064,这是为什么?
例如
a[10];
表示位数不会超过十,你输入的时候需要个索引记录a[]数组有效的位数。
使用的时候,只使用有效位数。
肯定会有一段内存不用的。或多或少。这就是数组存储动态数据特点。
如果内存管理的话,你设计个增量比如5.
一旦索引告诉你10个位置用完了,地方不够,你在动态申请
15个位置,把原来的复制到新的内存空间。
这就是数组内存管理的方法,但是一般程序不要求这样,因为你要作的是实现算法思想,而不是去想这些内存管理的方面。
所以现在大多不需要程序员考虑内存管理。对实现算法而讲,注重的是实现的思想。
a[10]不行,你就设置你认为足够长的。比如a[100]
通常这种情况,你要考虑你输入的最大数字对应的位数,这种题目肯定是有上限的,不是任何数都可以。
我刚看你的程序了,10进制变16进制程序有误,你没有考虑余数10,11...
10对应A,11对应B..
这样的话,应该用char[]数组存储。
下面是程序
你输入15,会输出F
100,会输出64
#include <stdio.h>
#include <math.h>
void main()
int num;
printf("请输入一个十进制整数:");
scanf("%d",&num);
char a[100]; //这里的数组长度应当依据什么来定义
int i=0;
int yushu;
while(num>0)
yushu=num%16;
if(yushu<10)
a[i]=yushu+'0';
else
a[i]='A'+(yushu-10);
num=num/16;
i++;
i--;
printf("转化为十六进制的数为:");
for(;i>=0;i--)
printf("%c",a[i]);
printf("\n");
参考技术A 用longint试试看...
以上是关于C语言如何定义一个16进制数的主要内容,如果未能解决你的问题,请参考以下文章