注册 登录
编程论坛 C++教室

#include<stdint.h>中 int_8的问题求解惑

yiyue123 发布于 2018-08-22 10:05, 2225 次点击
#include<stdio.h>
#include<stdint.h>

int main(void)
{
    int8_t a=127;
    printf("%d",a+1);在该定义中,整形为1字节,但输出结果却是128;

#include<stdio.h>
#include<stdint.h>

int main(void)
{
    int8_t a=128;
    printf("%d",a);这时才是正确结果-127;
请问为什么会这样?
3 回复
#2
rjsp2018-08-22 11:16
a+1 中 a 是 int8_t 类型,1 是 int 类型,
所以 int8_t 需要先提升为 int 类型,结果是 127+1=128(int)

int8_t b = 128;
字面常量溢出,属于“实现定义行为”,不多说了,假设就是你期待的 -128(int8_t) 吧,

假如一定要将 128(int) 打印成 -128,可以试试如下代码

#include <stdio.h>

int main(void)
{
    signed char a = 127;
    printf( "%hhd\n", a+1 );
}
#3
rjsp2018-08-22 11:19
简而言之
a+1 是值为 128 的 int 类型
a 是值为 -128 的 int8_t 类型
所以前者输出 128,后者输出 -128
#4
yiyue1232018-08-22 12:01
回复 2楼 rjsp
多谢!
1