对于char型的,如果超出范围怎样算?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于char型的,如果超出范围怎样算?相关的知识,希望对你有一定的参考价值。

char字符的范围不是—128~127吗?
假如定义a=156
然后怎么输出

156,就是-100。追问

怎么算的

追答

156 - 256 = -100。

弄明白了补码,就能知道这个规律了。

追问

如果用二进制怎么算?

追答

1000 0000 ~ 1111 1111,代表 -128 ~ -1;

0000 0000 ~ 0111 1111,代表 0 ~ 127。

a = 156,就是:a = 1001 1100。

这就是 -128 ~ -1 之间的数。

准确的说,156,就是[-100]补码。

追问

10000000为什么是-128

追答

补码,是基础知识。

你如果弄懂了补码,就不会有这一连串的问题。

参考:

http://zhidao.baidu.com/question/518892819.html

追问

算补码时是不是用1直接把最后一个替换?

对吗?

追答

算补码时是不是用1直接把最后一个替换?

----
不是。

求补码还要问?

补码,这可是基础知识。

书上有很多例题,看看就明白了。

参考技术A 取整追答

应该是类型错误,运行不了

追问

就是char字符的范围不是—128~127吗?

假如定义a=156

然后怎么输出

追答

忘了,3年没学了

追问

追答

不好意思

追问

没事

将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围

【中文标题】将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围【英文标题】:The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value in SQL Server 2005 【发布时间】:2013-03-27 05:43:04 【问题描述】:

我写了一个视图,其中表格中的日期被转换为

convert(varchar, date, 103) 

并取别名为 DATE1,然后我编写了如下查询:

select DATE1  
from date_demo
WHERE  MONTH(DATE1) = '12'

我只想检索月份 = 'december' 为 12 的特定记录

我遇到了一个错误:

将 char 数据类型转换为 datetime 数据类型会导致 datetime 值超出范围。

这是在 SQL Server 2005 中,请帮助我

【问题讨论】:

为什么不使用 where 子句中的基础日期列,而不是显式转换为字符串,然后隐式返回日期时间?你想让你的服务器哭吗? 【参考方案1】:

正如大卫建议的那样,您应该使用日期列而不是转换为字符串然后再转换回日期时间列。

但是,当您将其转换回日期时间时,您需要指定Date Time Style

select DATE1  from date_demo
WHERE  MONTH(convert(datetime,DATE1,103))= '12'

另外你需要指定varchar数据类型的长度阅读这篇文章bad habits to kick declaring varchar without length

【讨论】:

这不是错误所指的,SQL可以很好地完成从字符串到int的转换 我的错误。更新了答案

以上是关于对于char型的,如果超出范围怎样算?的主要内容,如果未能解决你的问题,请参考以下文章

char取值范围

超出有效内存范围的指针算术会产生啥危害?

将 char 数据类型转换为 datetime 数据类型会导致 datetime 值超出范围。异常

将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围

4路解码器怎么算解码范围

CSS怎样不让图片高度超出屏幕