c语言128位是什么
编译器的gcc是不支持__int128这种数据类型的,比如在codeblocks 16.01/Dev C++是无法编译的,但是提交到大部分OJ上是可以编译且能用的。C/C++标准。IO是不认识__int128这种数据类型的,因此要自己实现IO,其他的运算,与int没有什么不同。
但是官方上写了GCC提供了两种128位整数类型,分别是__int128_t和__uint128_t,分别用于声明有符号整数变量和无符号整数变量。
由于这种大整数无法使用函数printf()输出其值,所以自己做了一个整数转字符串函数write(),用于实现128位整数的输出。
亲测oj和洛谷可以AC
加法模板如下
#include <bits/stdc++.h>
using namespace std;
inline __int128 read()
{
__int128 x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
inline void write(__int128 x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
}
int main()
{
__int128 a = read();
__int128 b = read();
write(a + b);
return 0;
}
在C语言中,并没有任何数据类型可以表示精确的128位数。所以要表示128位数,就必须用数组模拟。比如,用字符数组模拟,每位字符表示一位数,使用'0'~'9'表示各个位上的数值。
例如:
char num[129] = "12345678……";
表示数字12345678。 由于128位过长,就不举128位的例子了。
输入输出均可以用字符串的方式。
另外,做计算的话,就必须自己写函数了,如加减乘除模除等,对于这类实现,在算法中称为大数计算,如果需要,可以对此进行搜索,有很多优秀算法。
c语言标志位状态怎么判断
在C语言中,标志位通常是用一个变量来表示某种状态,该变量的值只能是1或0。要判断标志位的状态,可以使用if语句或三目运算符等条件判断语句。
下面是一个示例代码,演示了如何判断标志位的状态:
```c
#include <stdio.h>
int main() {
int flag = 0; // 假设flag是一个标志位
// 使用if语句判断标志位状态
if (flag == 0) {
printf("标志位为0\n");
} else {
printf("标志位为1\n");
}
// 使用三目运算符判断标志位状态
printf("标志位为%d\n", flag ? 1 : 0);
return 0;
}
```
在上面的示例代码中,定义了一个整型变量flag,表示标志位的状态。通过if语句判断flag的值,如果flag等于0,则输出"标志位为0";否则,输出"标志位为1"。
另外,还可以使用三目运算符(?:)来判断标志位的状态。flag ? 1 : 0表示如果flag为真,则结果为1,否则结果为0。通过printf函数输出标志位的状态。
还没有评论,来说两句吧...