我目前正在使用K&R的书 - 第2版学习C.
到目前为止,我已经了解到有3种类型的char数据类型(8位):plain char,默认情况下主要是签名,但可以根据平台进行无符号签名,unsigned char以及signed char.
-1in 的位模式signed char是11111111和hex是0xFF.
255in 的位模式unsigned char是11111111和hex是0xFF.
那么,两者都是一样的吗?没有符号表示它是签名还是未签名? 我的问题是它是如何彼此区分的?我显然在这里遗漏了什么,但是什么?:-)
对于int(4个字节),有一个类似的例子:
signed int值的值255在位模式中表示为00000000 00000000 00000000 11111111
unsigned int值的值255在位模式中表示为00000000 00000000 00000000 11111111
两者都是一样的.那么,系统如何发现它是int数据类型signed还是unsignedint数据类型?
首先,请原谅我提出这个问题,因为已有数十种类似的变体.但是,我不完全确定如果我能正确理解它.所以,请让我解释一下我能理解的内容,如果我错了,请纠正我.
这是K&R书中的一个例子:
#include <stdio.h>
main()
{
1) int c;
2) 4) while ((c = getchar()) != EOF)
3) putchar(c);
}
Run Code Online (Sandbox Code Playgroud)
所以,我理解上面的程序是这样的:
1)我们宣布c的int,而不是char因为使用char的数据类型并不总是正确的操作,它最终会搞砸了.Char数据类型根据系统而有变化,默认情况下可以是signed[-127,+ 127]或unsigned[0,255].此外,EOF并不总是-1默认情况下,因为它也取决于系统和编译器.
1.1)因此,如果我们在系统上默认声明c为char它,signed char那么它仍然会工作但是如果我们输入一个等于ASCII 128及以上的字符,它会搞砸吗?会发生什么? getchar()将返回所选数据类型的最大可能ASCII值的值,127?
1.2)相反,如果我们声明cas char并默认是unsigned char在系统上,那么无论如何getchar()总是不等于EOF因为我们不能存储负值,对吧?
因为上面的所有变化都正确地声明c为int避免可能的冲突?
2)我们输入一些字符作为输入c = getchar() …
当有人登录他的帐户时,我在存储过程中有以下行:
UPDATE AcccountsTable SET LogDate = getdate() WHERE AccID = @identity
Run Code Online (Sandbox Code Playgroud)
但是,我想在每个连续登录日添加一个新功能,以添加+1到我的新列(ConsecutiveDays)中AccountsTable.
例如:
Day 1: 2018-04-11 20:00
Day 2: 2018-04-12 15:30
Day 3: 2018-04-13 10:20
and etc ....
Run Code Online (Sandbox Code Playgroud)
对于在连续几天内记录的用户帐户ID,连续总天数应为3天.
如果用户未登录day 4- 2018-04-14但在第二天登录,2018-04-15则应将所有连续日期还原为1.
我在MSSQL Server 2008 R2上搜索了类似的存储过程解决方案但没有成功.我根本不擅长SQL,所以我非常感谢你的帮助!先感谢您!