c++ int,unsigned int混合表达式类型转换

测试代码:

#include<cstdio>
#include<iostream>
using namespace std;
int main() {
    unsigned int a = 3;
    int b=2,c=1;
    if(b<c-a) cout<<"int transform to unsigned int"<<endl;
    cout<<b<<" "<<c-a<<endl;;
    cout<<a*-1<<endl;
    long long d = 5;
    cout<<a-d<<" "<<sizeof(a-d)<<endl;
    return 0;
}

运行结果:

int transform to unsigned int
2 4294967294
4294967293
-2 8

int和unsigned int的混合表达式,计算时会将int转换为unsigned int

普通情况下会将范围小的隐式转换为范围大的,但对于int和unsigned int,就说不准哪个范围大了,经测试是会将int转换为unsigned int(被坑过。。。)

时间: 2024-11-06 03:35:09

c++ int,unsigned int混合表达式类型转换的相关文章

C语言里int,unsigned int,shor int...转换输出问题

这问题,有时候是个困扰,抽空梳理一遍. signed char->unsgned char:%c->%c 0->127(对应范围) char->int:%c->%d->%c,'A'->65(可打印字符表对应) short int->int:%d->%d,100->100(对应,反向操作若超出范围,循环读取对应) short int->unsinged int:%u->%d,(对应,反向操作若超出范围,循环读取对应) unsigned

无符号整型unsigned int、unsigned long、usigned long long、size_t比较和格式控制

位数比较 由于数据的长度和平台相关,所以基于 64 位系统比较. Windows Linux unsigned int 32 bits/4294967295 32 bits unsigned long 32 bits 64 bits/18446744073709551615 unsigned long long 64 bits 64 bits size_t 32 bits 64 bits 可以看到,size_t 和 unsigned long 比较同步.另外 ssize_t 和 size_t 的

C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)

强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整型数据的指针类型,后赋给p 注示:类型说明符和表达式都必须加括号,表达式为单个变量可不加括号. 总结:只要看到(类型说明符) (表达式) 的一定为强制类型转换:如(int *) 0x0022; 再举一例:#define DIR *((volatile unsigned int *) 0x0022)

一道int和unsigned char之间强制类型转换的题目

设有语句: ``` int a=258,b; unsigned char c; b=c=a; ``` 则b的值为___. (答案:2) (一)int 类型和char类型之间强制类型转换的规则 ```将int类型变量i的值赋给char类型变量c,会将i的值当作一个ascii码赋给c. int a=51; char c=a; cout<<c<<endl; ``` 输出结果是3 ```将char类型变量c的值赋给int类型变量i,会将c中存储的字符的ascii码当作一个整型数赋给i. c

Java随笔:混合类型表达式类型转换问题

混合表达式处理“坑”很多,看看下面这段代码: short x = 0; int y = 123456; x += y; System.out.println(x); 按照正常的理解 x+=y 等价于 x = x+y 这里将int型的 y 强转为short型 x,会报告错误: 错误: 不兼容的类型: 从int转换到short可能会有损失 但是,上面的代码居然没有报错. 这里就是混合类型表达式默认进行了一次类型转换,将结果转换为左侧变量的类型,即x类型的short. 由于123456越界了,所以结果

unsigned int与int相加问题

作者 : 卿笃军 一道unsigned int与int类型的相加题目,引发了我对这个问题的思考. 首先要明白两个问题: 问题一. unsigned int 和 int到底哪个能表达出来的数上限大呢? 答:当然是unsigned int. 为什么? 答:因为,int将最高位看做是符号位,0表示'正',1表示'负',也就是说,最高位不能用来存值. 问题二. 当计算机进行两数相加的时候会如何进行类型转换呢? 答:当然是将上限小的转化为上限大的咯.(就是将int类型转化为unsigned int类型).

(转载)深入解析unsigned int 和 int

就如同int a:一样,int 也能被其它的修饰符修饰.除void类型外,基本数据类型之前都可以加各种类型修饰符,类型修饰符有如下四种:1.signed----有符号,可修饰char.int.Int是默认有符号的.2.unsigned-----无符号,修饰int .char3.long------长型,修饰int .double4.short------短型,修饰int 我们主要来看一下signed和unsigned与int之间的联系与区别.什么叫做有符号,什么叫做无符号这个问题其实很简单,比如

Java中int与String间的类型转换

int -> String int i=12345;String s=""; 除了直接调用i.toString();还有以下两种方法第一种方法:s=i+"";第二种方法:s=String.valueOf(i);这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢? String -> int s="12345";int i;第一种方法:i=Integer.parseInt(s);第二种方法:i=Integer.valu

int与string之间的类型转换--示例

package demo; public class IntDemo { public static void main(String[] args) { // String-->int 类型转换 // static int parseInt(String s) String s="123567"; int number=Integer.parseInt(s); System.out.println(number); // int-->String两种方式 // Integ