c++取模问题

c++中对于将一个超出指定类型范围的的数赋给该类型对象,编译器将进行怎样的处理?

书中提到:

对于unsigned类型,例如 unsigned char的范围是0—255,将336存储到unsigned char中,实际赋值为80,即为336对256取模;将-1存储到unsigned char中是合法的,但实际中unsigned char 存储的是255,即为 -1对256的取模值。

对于signed类型,则是由编译器决定的。

先介绍一下取模运算的定义:(另外提一下取模和取余基本上是一样的,只是取模多用于计算机术语,而取余更多倾向于数学)

给定一个正整数p,任意一个整数n,一定存在等式 :
n = kp + r ;
其中 k、r 是整数,且 0 ≤ r < p,则称 k 为 n 除以 p 的商,r 为 n 除以 p 的余数。
在vc++6.0上运行时分别有以下情况:
1、unsigned char  num=-1;输出num的结果为255。
2、unsigned char  num=-286;输出num的结果为226。
3、unsigned char  num=365;输出num的结果为109。(这种情况会有warning提示,以上两种则没有任何错误信息提示)
由于软件原因 对于signed赋值先不进行讨论,另外对于余数不同语言或计算器也有不同的定义和结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值